/*  
工厂方法模式 - 创建物件  
厂商现有Aspirin的生产线、若想添加Paracetamol生产线、就能用工厂方法模式。  
Aspirin和Paracetamol有各自的物件、抽像物件、工厂、抽象工厂。  
在不修改原有程序下增加物件。  
Java是用interface和implement来表达物件、抽像物件的关系。  
Swift是用protocol和继承来表达物件、抽像物件的关系。  
*/  
  
import Foundation  
  
protocol MedicineProduct {  
    var p_stName : String { get set }  
    var p_stFormula : String { get set }  
    var p_douDensity : Double { get set }  
    var p_mCAS: Int { get set }  
    var p_stTreatment : String { get set }  
      
    func getProduct() -> String  
}  
 
protocol MedicineFactory {  
    func createMedicine() -> MedicineProduct  
}  
  
class AspirinProduct : MedicineProduct {  
    var p_stName : String = "Aspirin"  
    var p_stFormula : String = "C9H8O4"  
    var p_douDensity : Double = 1.40  
    var p_mCAS: Int = 50782  
    var p_stTreatment : String = "pain, fever, inflammation"  
      
    func getProduct() -> String {  
        return "\(p_stName), Treatment are \(p_stTreatment),  Formula is \(p_stFormula), Density is \(p_douDensity)g/cm3, CAS number is \(p_mCAS)."  
    }  
}  
  
class ParacetamolProduct : MedicineProduct {  
    var p_stName : String = "Paracetamol"  
    var p_stFormula : String = "C8H9NO2"  
    var p_douDensity : Double = 1.263  
    var p_mCAS: Int = 103902  
    var p_stTreatment : String = "headache, muscle aches, arthritis, backache, toothaches, colds, and fevers"  
      
    func getProduct() -> String {  
        return "\(p_stName), Treatment are \(p_stTreatment),  Formula is \(p_stFormula), Density is \(p_douDensity)g/cm3, CAS number is \(p_mCAS)."  
    }  
}  
  
class AspirinProductFactory : MedicineFactory {  
    static let sharedInstance:AspirinProductFactory = AspirinProductFactory()  
    func createMedicine() -> MedicineProduct {  
        return AspirinProduct()  
    }  
}  
  
class ParacetamolProductFactory : MedicineFactory {  
    static let sharedInstance:ParacetamolProductFactory = ParacetamolProductFactory()  
    func createMedicine() -> MedicineProduct {  
        return ParacetamolProduct()  
    }  
}  
  
let Aspirinproduct1: MedicineProduct = AspirinProductFactory.sharedInstance.createMedicine()  
print(Aspirinproduct1.getProduct())  
  
print("")  
  
let Paracetamolproduct1: MedicineProduct = ParacetamolProductFactory.sharedInstance.createMedicine()  
print(Paracetamolproduct1.getProduct())  

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 kk匡 的頭像
    kk匡

    kk匡的日記&學習筆記

    kk匡 發表在 痞客邦 留言(0) 人氣()