对象创建
- 原型
- 工厂方法
- 抽象工厂
- 生成器
- 单例
工厂方法
工厂方法模式是抽象工厂模式的组成部分。
各种具体工厂重载其抽象工厂父类中定义的工厂方法,并用这个重载的工厂方法创建自己的产品(对象)。
对象工厂与生产有形产品的真实工厂类似,例如,制鞋厂生产鞋,手机工厂生产手机。
你让工厂给你生产些产品,你给它们发送一个“生产产品”的消息。制鞋工厂和手机工厂都按照相同的“产品生产”的协议,启动其生产线。过程结束后,每个厂家都返回所生产的特定类型的产品。
我们把“生产”这个有魔力的词称作工厂方法,因为它是命令生产者(工厂)得到产品的方法。
生产者本身不必是抽象工厂,它可以是任何类。
要点在于不是直接创建对象,而是使用类或对象的工厂方法创建具体产品,并以抽象类型返回。
1.何为工厂方法模式
工厂方法也称为虚构造器(virtual constructor)。
它适用于这种情况:一个类无法预期需要生成哪个类的对象,想让其子类来指定所生成的对象。
工厂方法模式:定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。
2.何时使用工厂方法
在以下情形,会要使用到工厂方法模式:
- 编译时无法准确预期要创建的对象的类;
- 类想让其子类决定在运行时创建什么;
- 类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化。
使用这一架构的一个常见例子是Cocoa Touch框架中的NSNumber。
例如:[NSNumber numberWithBool:YES]消息会得到NSNumber的子类NSCFBoolean的一个实例,这个实例包含传给类工厂方法的布尔值。
工厂方法对框架设计者特别有用。
3.为何这是创建对象的安全方法
工厂方法模式让客户程序可以要求由工厂方法创建的对象拥有一组共同的行为。所以往类层次结构中引入新的具体产品并不需要修改客户端代码,因为返回的任何具体对象的接口都跟客户端一直在用的从前的接口相同。