1. 工厂方法模式
<code>
定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。
</code>
何时使用工厂方法模式?
1. 编译时无法确定预期要创建的对象的类;
2. 类想让其子类决定是在运行时创建什么;
3. 类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化。
举例:[NSNumber numberWithBool:bool]与[NSNumber numbberWithChar:char]
2.抽象工厂模式
<code>
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
</code>
何时使用工厂方法模式?
抽象工厂模式与工厂方法模式
抽象工厂模式 | 工厂方法模式 |
---|---|
通过对象组合创建抽象产品 | 通过类继承创建抽象产品 |
创建多系列产品 | 创建一种产品 |
必须修改父类才能支持新的产品 | 子类化创建者并重载工厂方法以创建新产品 |
3. 生成器模式
<code>
将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。
</code>
何时使用生成器模式?
1. 需要创建设计各种部件的负责对象。创建对象的算法应该独立于部件的装配方式。
2. 构建过程需要以不同的方式(例如,部件或者表现的不同组合)构建对象。
举例
PersonBuilderDirector *director = [[PersonBuilderDirector alloc]init];
PresionBuilder builder = [[PersonFatBuilder alloc]init];
//为director指定builder
director.builder = builder;
//director发出构建的指令,builder负责具体的建造过程
[director buildPerson];
4. 原型模式
<code>
使用原型实例指定创建对象的种类。并通过复制这个原型创建新的对象。
</code>
何时使用原型模式?
1. 需要创建的对象独立于其类型与创建的方式;
2. 实例化的类是在运行时决定的;
3. 不想要与产品层次相对应的工厂层次;
4. 不同类的实例间的差异仅是状态的若干组合,这样复制相应数量的原型比手工实例化更加方便;
5. 类不容易创建,比如每个组件可把其他组件作为子节点的组合对象,复制已有的组合对象并对副本进行修改会更加容易。