工厂方法模式
基本理解
- 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
- 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对客户端来说,去除了具体产品的依赖。但是它违背了开发封闭原则,如果新添加运算类则需要修改工厂类。
- 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行。如果想添加新的运算功能,则需要修改客户端。
- 工厂方法也称为虚构造器。它适用于这种情况:
一个类无法预期需要生成哪个类的对象,想让子类来制定所生成的对象。 - 工厂方法克服了简单工厂违背了开放封闭原则的缺点,又保持了封装对象创建过程的优点。
何时使用工厂方法
- 编译时无法确定预期要创建的对象的类
- 类想让子类决定在运行时创建什么
- 类若有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化
在Cocoa Touch框架中应用工厂方法
- NSNumber。我们在使用NSNumber时,我们可以通过alloc和init来创建NSNumber的实列,也可以同构numberWith:方法,其实numberWith:方法就是一个类的工厂方法。创建的相关细节,都由NSNumber的类工厂方法负责。
例子:
比如
NSNumber *twentySeven = [NSNumber numberWithInt:27];
其中的numberWithInt就是一个工厂方法。