1. 工厂方法模式简介
工厂方法模式(Factory Pattern), 是创建型设计模式之一. 工厂方法也称为虚构造器(virtual constructor), 它适用于这种情况: 一个类无法预期需要生成哪个类的对象, 想让子类来指定所生成的对象. 工厂方法使得一个类的实例化延迟到其子类.
与直接创建新的具体对象相比, 使用工厂方法创建对象可算作一种最佳方法. 工厂方法模式让客户程序可以要求由工厂方法创建的对象拥有一组共同的行为. 所以往类层次结构中引入新的具体产品并不需要修改客户端代码, 因为返回的任何具体对象的接口都跟客户端一直在用的从前的接口相同.
2. 工厂方法模式定义
定义一个用于创建对象的接口, 让子类决定实例化哪一个类.
3. 工厂方法模式的使用场景
在任何需要生成复杂对象的地方, 都可以使用工厂方法模式. 复杂对象适合使用工厂模式, 用 new 就可以完成创建的对象无需使用工厂模式.
3.1 编译时无法准确预期要创建的对象的类
3.2 类想让其子类决定在运行时创建什么
3.3 类有若干辅助类为其子类, 而你想将返回哪个子类这一信息局部化(出自《Objective-C 编程之道 iOS 设计模式解析》)
工厂方法模式把具体产品的创建推迟到工厂类的子类 (具体工厂) 中, 此时工厂类不再负责所有产品的创建, 而只是给出具体工厂必须实现的接口, 这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类, 符合开放封闭原则.
常见例子是 Cocoa Touch 框架中的 NSNumber, 例如,[NSNumber numberWithBool:YES] 消息会得到 Number 的子类 NSCFBoolean 的一个实例.
4. 工厂方法模式的 UML 图
工厂方法模式 UML 图. PNG
5. 角色划分
角色一: 抽象产品 (一个)
角色二: 具体产品 (多个)
角色三: 抽象工厂 (一个)
角色四: 具体工厂 (多个)
6.Demo 实践
Demo 以三星和华为生产电脑举例, 还是先看图, UML 图如下:
FactoryPattern.PNG
Demo 地址: https://github.com/zhiyoukaifa/FactoryPattern
参考书籍:
《Objective-C 编程之道 iOS 设计模式解析》
《Android 源码设计模式解析与实战》
参考博客:
https://blog.andyqiao.top/article/12/
来源: http://www.jianshu.com/p/21af2867a1f2