设计模式

设计模式-工厂模式

2023-10-11  本文已影响0人  Hengry

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

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

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

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()       // 输出:阿里推流器停止推流

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

上一篇 下一篇

猜你喜欢

热点阅读