美文网首页设计模式
设计模式-工厂模式

设计模式-工厂模式

作者: Hengry | 来源:发表于2023-10-11 21:48 被阅读0次

    通过抽象工厂实现两种推流器,分别为腾讯推流、阿里推流

    通过抽象工厂模式,你可以轻松实现两种不同的推流器(腾讯推流器和阿里推流器),而不需要改变使用这些推流器的客户端代码。首先,我们需要定义抽象工厂接口和具体工厂来创建这两种推流器。

    首先,定义推流器接口和具体推流器类:

    Copy code
    // 推流器接口
    protocol Streaming {
        func startStreaming()
        func stopStreaming()
    }
    
    // 腾讯推流器
    class TencentStreaming: Streaming {
        func startStreaming() {
            print("腾讯推流器开始推流")
        }
    
        func stopStreaming() {
            print("腾讯推流器停止推流")
        }
    }
    
    // 阿里推流器
    class AliStreaming: Streaming {
        func startStreaming() {
            print("阿里推流器开始推流")
        }
    
        func stopStreaming() {
            print("阿里推流器停止推流")
        }
    }
    

    然后,定义抽象工厂接口和具体工厂类来创建不同的推流器:

    Copy code
    // 抽象工厂接口
    protocol StreamingFactory {
        func createStreaming() -> Streaming
    }
    
    // 腾讯推流工厂
    class TencentFactory: StreamingFactory {
        func createStreaming() -> Streaming {
            return TencentStreaming()
        }
    }
    
    // 阿里推流工厂
    class AliFactory: StreamingFactory {
        func createStreaming() -> Streaming {
            return AliStreaming()
        }
    }
    
    

    现在,你可以使用这些工厂来创建不同类型的推流器:

    Copy code
    let tencentFactory = TencentFactory()
    let tencentStreaming = tencentFactory.createStreaming()
    tencentStreaming.startStreaming()  // 输出:腾讯推流器开始推流
    tencentStreaming.stopStreaming()   // 输出:腾讯推流器停止推流
    
    let aliFactory = AliFactory()
    let aliStreaming = aliFactory.createStreaming()
    aliStreaming.startStreaming()      // 输出:阿里推流器开始推流
    aliStreaming.stopStreaming()       // 输出:阿里推流器停止推流
    

    通过抽象工厂模式,你可以轻松切换不同的推流器类型,而不会影响使用它们的客户端代码。这使得代码更加灵活、可维护,并且有助于实现产品家族的独立变化。

    并且通过简单工厂将两种推流器进行封装统一使用
    通过简单工厂模式,你可以将不同种类的推流器(腾讯推流器和阿里推流器)进行封装,以便客户端可以使用一个>简单的接口来创建和使用它们。

    首先,定义一个推流器工厂类,它将负责创建具体的推流器:

    Copy code
    class StreamingFactory {
        enum StreamingType {
            case tencent
            case ali
        }
        
        static func createStreaming(type: StreamingType) -> Streaming {
            switch type {
            case .tencent:
                return TencentStreaming()
            case .ali:
                return AliStreaming()
            }
        }
    }
    

    现在,你可以使用 StreamingFactory 来创建不同类型的推流器,而无需关心具体的实现:

    Copy code
    let tencentStreaming = StreamingFactory.createStreaming(type: .tencent)
    tencentStreaming.startStreaming()  // 输出:腾讯推流器开始推流
    tencentStreaming.stopStreaming()   // 输出:腾讯推流器停止推流
    
    let aliStreaming = StreamingFactory.createStreaming(type: .ali)
    aliStreaming.startStreaming()      // 输出:阿里推流器开始推流
    aliStreaming.stopStreaming()       // 输出:阿里推流器停止推流
    

    通过使用简单工厂模式,你可以封装具体推流器的创建细节,提供了一个统一的接口供客户端使用。这种方法使得客户端代码更加简洁,同时具有扩展性,因为你可以轻松地添加新的推流器类型,而不需要修改客户端代码。

    相关文章

      网友评论

        本文标题:设计模式-工厂模式

        本文链接:https://www.haomeiwen.com/subject/nvjnbdtx.html