设计模式——抽象工厂模式及简单实现

抽象工厂模式

1. 意图

  1. 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  2. 解决接口选择的问题。

个人理解:工厂模式是根据子类实例化产品,而抽象工厂是根据选择实例化具体工厂,再使用工厂方法来实例化产品。

2. 适用场景

  • 系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

3. 应用实例

有一个类叫做手机工厂类(抽象工厂),而苹果手机类、小米手机类、华为手机类都是具体工厂。在这些具体工厂里,我们又可以选择性地生成产品。手机类是一个抽象产品类。苹果手机工厂类既可以实例化iPhone 11这个具体产品、又可以实例化iPhone X这个具体产品

4. 类图

1.png

说明

抽象工厂中规定了具体工厂的方法和属性,而在抽象产品中规定了具体产品的方法和属性。

4. 优点

  • 分离了具体的类
  • 易于交换产品系列
  • 有利于产品的一致性

5. 实现

main.swift

// 定义协议

struct PhoneSeries {
    let series: [String]
}

protocol PhoneMaking {
    func make() -> PhoneSeries
}

// 工厂方法实现

final class HuaweiPhone {
    func make() -> PhoneSeries {
        return PhoneSeries(series: ["Huawei P40", "Huawei P40 Pro"])
    }
}

final class XiaomiPhone {
    func make() -> PhoneSeries {
        return PhoneSeries(series: ["Xiaomi 10 Pro", "Xiaomi CC9 Pro"])
    }
}

// 抽象工厂

enum PhoneFactoryType: PhoneMaking {
    case Huawei
    case Xiaomi
    
    func make() -> PhoneSeries {
        switch self {
        case .Huawei:
            return HuaweiPhone().make()
        case .Xiaomi:
            return XiaomiPhone().make()
        }
    }
}


// test

let huawei = PhoneFactoryType.Huawei.make()
let xiaomi = PhoneFactoryType.Xiaomi.make()
print(huawei)
print(xiaomi)
执行结果
PhoneSeries(series: ["Huawei P40", "Huawei P40 Pro"])
PhoneSeries(series: ["Xiaomi 10 Pro", "Xiaomi CC9 Pro"])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值