携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
设计模式相信大家都很熟悉了,但是越是基础的东西也越是需要经常的回顾与思考,于是着手写一个温故而知新的设计模式回顾系列。
在 8 月,准备把各个常用的不常用的设计模式都进行一次回顾,并大概聊一下各个模式的特点与在 iOS 中的大概使用场景与情况。
这里是设计模式回顾的第二十篇,工厂模式的相关回顾。
工厂模式
1、什么是工厂模式
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的
主要用工厂方法代替 new 操作,以提高系统的扩展性和降低维护成本。工厂模式分为简单工厂模式、工厂模式、抽象工厂模式。这些讲一下简单工厂模式和工厂模式。
2、工厂模式用在什么地方
- 在有子类的情况下都可以考虑使用工厂模式。
3、工厂模式的使用
- 创建产品类
- 创建工厂类
- 通过工程类方式生成产品类并返回
- 如果是简单工厂,则一个工厂对应所有的产品
- 如果是工厂模式,则一个工厂对应一个产品
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)
好处是可以隐藏具体子类,坏处是类多了就越来越难管理类。