/*
工厂方法模式 - 创建物件
厂商现有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())
- Jul 30 Sat 2016 22:49
Swift 01 工厂方法模式
全站熱搜
留言列表