Swift 02 抽象工厂模式 Abstract Factory Pattern

/*
厂商现在有阿司匹林和扑热息痛生产线。
现在厂商想生产1mg*10s装、1mg*20s装的阿司匹林和扑热息痛。
*/

// 抽象產品
protocol MedicineProduct {
    func getProduct(p_stName: String, p_stFormula: String) -> String
}

// 產品 1mg*10s装
class OneMgTenProduct : MedicineProduct {
    func getProduct(p_stName: String, p_stFormula: String) -> String {  
        return "\(p_stName) 1mg*10s, Formula: \(p_stFormula)"
    }
}

// 產品 1mg*20s装
class OneMgTwentyProduct : MedicineProduct {
    func getProduct(p_stName: String, p_stFormula: String) -> String {  
        return "\(p_stName) 1mg*20s, Formula: \(p_stFormula)"
    }
}

// 抽象工廠
protocol AbstractMedicineFactory {
    func createProduct() -> MedicineProduct
}

// 工廠 1mg*10s装
class OneMgTenFactory : AbstractMedicineFactory {
    static let sharedInstance: OneMgTenFactory = OneMgTenFactory()
    func createProduct() -> MedicineProduct {
        return OneMgTenProduct()
    }
}

// 工廠 1mg*20s装
class OneMgTwentyFactory : AbstractMedicineFactory {
    static let sharedInstance: OneMgTwentyFactory = OneMgTwentyFactory()
    func createProduct() -> MedicineProduct {
        return OneMgTwentyProduct()
    }
}

let tenMgProduct: MedicineProduct = OneMgTenFactory.sharedInstance.createProduct()
let twentyMgProduct: MedicineProduct = OneMgTwentyFactory.sharedInstance.createProduct()

// 生產 1mg*10s装 藥物
print(tenMgProduct.getProduct(p_stName: "Aspirin", p_stFormula: "C9H8O4"))
print(tenMgProduct.getProduct(p_stName: "Paracetamol", p_stFormula: "C8H9NO2"))

// 生產 1mg*20s装 藥物
print(twentyMgProduct.getProduct(p_stName: "Aspirin", p_stFormula: "C9H8O4"))
print(twentyMgProduct.getProduct(p_stName: "Paracetamol", p_stFormula: "C8H9NO2"))

// 假如想增加1mg*30s装 生產線、只需增加工廠和產品

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值