创建型模式简介
一、单件模式,SINGLETON,对象创建模式
保证一个类只有一个实例,并提供一个访问它的全局访问点。
class Singleton{
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
Singleton* Singleton::_instance=0;
Singleton* Singleton::Instance() {
if(0==_instance)
_instance=new Singleton;
return _instance;
}
二、原型模式,PROTOTYPE,对象创建型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用性:
当一个系统应该独立于它的产品的创建、构成和表示时,应该使Prototype;
当要实例化的类是在运行时可指定时,如动态装载;
为了避免创建一个与产品类层次平行的工厂类层次时;
当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
C++中通过拷贝构造器来完成。
Door* Door::Clone() const{
return new Door(*this);
}
三、生成器,BUILDER,对象创建型模式
将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。
适合性:
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同的表示时。
用Builder配置Director,进行创建。
Builder与Abstract Factory类似,区别在于前者是一步步创建复杂对象,最后一步返回对象,而后者是立即返回。Composite通常是用Builder生成的。
四、抽象工厂,ABSTRACT FACTORY,对象创建型模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
系统不依赖于产品类实例如何被创建,组合和表达的细节
系统要由多个产品族中一个来配置时
当你要强调一系列相关产品对象的设计以便进行联合使用时
当你提供一个产品类库,而只想显示它们的接口而不是实现时
五、工厂方法,FACTORY METHOD,类创建型模式
定义一个用于创建对象的接口,让子类决定实例化那一个类。FACTORY METHOD使一个类的实例化延迟到其子类。
适用性:
当一个类不知道它所必须创建的对象的类的时候。
当一个类希望由它的子类来指定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
抽象工厂通常用工厂方法实现。