ios-简单工厂模式

  • 何时使用工厂方法
    • 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()) //矿泉水是透明色
  
    }
}
复制代码

参考www.jianshu.com/p/847af218b…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享