iOS Developer

ios设计模式之简单工厂模式

2020-01-08  本文已影响0人  云霄_云霄

最近一直在阅读OC编程之道(ios设计模式解析)一书(往期文章中我也将电子版的下载链接分享了出来)。其中包括23种设计模式和7种设计原则,如下图(此图为网络图片): 设计模式.png

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()) //矿泉水是透明色
  
    }
}

这样我们就简单实现了一个工厂方法,通过一个工厂类来管理所有饮料的生产,而且我们在需要多生产一种类型的饮料的时候,只需要创建此饮料的类,然后在工厂方法中实现就OK了。

我在这里只是抛砖引玉,只是在讲解模式,这里面我们还有好多可以扩展的,比如不同的饮料有不同的口味,配方等等,共有的属性我们可以写在父类来实现,但是每个子类也可以有自己特有的属性。

上一篇下一篇

猜你喜欢

热点阅读