- 何时使用工厂方法
- 1、编译时无法准确预期要创建的对象的类;
- 2、类想让其子类决定在运行时创建什么;
- 3、类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化;
- 简单的代码逻辑,提现一下工程方法的模式
- 文章中我拿生活中日常饮用的饮料来做例子,我们首先会有一个父类,
- 名字是:Drinks,代表饮料。
- 还有三个继承Drinks的子类,
- 名字分别为:可乐CocaCola芬达Fender矿泉水MineralWater。然后我们会有一个专门的
- 工厂类DrinksFactory来管理生产何种饮料,DrinksFactory通过一个枚举和一个方法来生产。
1、Drinks类
import UIKit
class Drinks: NSObject {
func drinksColor(){
NSLog("饮料颜色")
}
}
复制代码
2、CocaCola类
import UIKit
class CocaCola: Drinks {
override func drinksColor(){
NSLog("可口可乐是褐色")
}
}
复制代码
3、Fender类
import UIKit
class Fender: Drinks {
override func drinksColor(){
NSLog("芬达是橙色")
}
}
复制代码
4、MineralWater类
import UIKit
class MineralWater: Drinks {
override func drinksColor(){
NSLog("矿泉水是透明色")
}
}
复制代码
5、DrinksFactory类
import UIKit
enum DrinkType:Int {
case DrinkCocaCola = 0 //可口可乐
case DrinkFender = 1 //芬达
case DrinkMineralWater = 3 //矿泉水
}
class DrinksFactory: NSObject {
func createDrinksWithType(drinkstype:DrinkType) -> Drinks {
switch drinkstype {
case .DrinkCocaCola:do {
let color = CocaCola()
return color;
}
case .DrinkFender:do{
let fender = Fender()
return fender;
}
case .DrinkMineralWater:do{
let mineralWater = MineralWater()
return mineralWater;
}
}
}
}
复制代码
当我们在需要生产的时候我们调用方法为
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = UIColor.red
let cocaCola:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkCocaCola)
print(cocaCola .drinksColor()) //可口可乐是褐色
let fender:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkFender)
print(fender .drinksColor()) //芬达是橙色
let mineralWater:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkMineralWater)
print(mineralWater .drinksColor()) //矿泉水是透明色
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END