iOS设计模式之工厂模式

72 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情


设计模式相信大家都很熟悉了,但是越是基础的东西也越是需要经常的回顾与思考,于是着手写一个温故而知新的设计模式回顾系列。
在 8 月,准备把各个常用的不常用的设计模式都进行一次回顾,并大概聊一下各个模式的特点与在 iOS 中的大概使用场景与情况。

这里是设计模式回顾的第二十篇,工厂模式的相关回顾。

工厂模式

1、什么是工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的

主要用工厂方法代替 new 操作,以提高系统的扩展性和降低维护成本。工厂模式分为简单工厂模式、工厂模式、抽象工厂模式。这些讲一下简单工厂模式和工厂模式。

2、工厂模式用在什么地方

  • 在有子类的情况下都可以考虑使用工厂模式。

3、工厂模式的使用

  1. 创建产品类
  2. 创建工厂类
  3. 通过工程类方式生成产品类并返回
  4. 如果是简单工厂,则一个工厂对应所有的产品
  5. 如果是工厂模式,则一个工厂对应一个产品

4、总结

使用工厂模式,可以将创建的具体过程屏蔽起来,起到减少代码和提高灵活度的目的。

有时可以选择在类中直接实现工厂模式,例如最常见的 initWithFrame 不过在如果生成的情况多的话,最好还是用工厂类实现工厂模式,方便管理。

5、demo

/// 普通工厂模式
import UIKit

class House: NSObject {
    var size : CGSize?
    var height : Float?
    var floorNumber : Int?
    
    override var description: String {
        
        return "place:\(self.place)) size:\(self.size) height:\(self.height) floorNumber:\(self.floorNumber)"
    }
}

class HouseFactory: NSObject {
    class func createHouse() -> House {
        return House();
    }
    class func createBigHouse() -> House {
        let bigHouse = House()
        bigHouse.size = CGSize(width: 100, height: 100)
        bigHouse.height = 15
        bigHouse.floorNumber = 5
        return bigHouse;
    }
    class func createSmallHouse() -> House {
        let smallHouse = House()
        smallHouse.size = CGSize(width: 8, height: 10)
        smallHouse.height = 2
        smallHouse.floorNumber = 1
        return smallHouse;
    }
}

简单工厂模式则就是UIButton(type: .custom)
好处是可以隐藏具体子类,坏处是类多了就越来越难管理类。