几种创建型的设计模式概析【下】——Builder模式,ProtoType模式【C++实现】
2011-03-14 13:40
549 查看
Bulider模式和AbstractFactory模式在功能上有些相似,都是负责管理创建复杂对象的组件。与AbstractFactory模式不同的是,Builder模式是将一个对象的创建分成几个小部分,然后一步一步的进行对象的创建;Builder就是在创建的对象的过程中做文章,通过对不同的步骤传入不同的参数,最后得到不同的创建过程。而AbstractFactory模式不会在创建过程中做文章,它所创建的对象过程也没有先后必然的次序关系,而是一次性创建成功。举个例子来说:不同的汽车汽车有很多组件,方向盘,座椅,刹车踏板;用AbstractFactory模式创建这些对象时,可将其再细继承两个子类,一个创建货车的组件,一个创建小汽车的组件,在AbstractFactory中提供抽象接口;而用Builder模式时,Builder类虽然同样封装了创建对象的过程,但是在创建的过程中通过指定不同的参数(货车,小汽车)来创建不同的组件,生产出来的同样是汽车组件,而因为在创建过程中传递了不同参数,导致创建结果有微小差异。Builder模式的UML图如下:
上图代码实现如下:
ProtoType模式比较简单易用,通常当我们需要创建一个和已有对象一摸一样的对象时,就需要用到这个模式,说到这,很多人可能会想到可以通过拷贝构造函数来实现这种功能。没错!ProtoType的原理就是在拷贝构造函数上下功夫,通过对象的自我拷贝构造来实现之。其UML图示如下:
上图代码实现如下:
上图代码实现如下:
#include <iostream> #include <string> using namespace std; class Product { public: Product() {} ~Product() {} }; class Builder { protected: Builder() {} ~Builder() {} public: virtual void CreatePartA( const string & str)=0; virtual void CreatePartB( const string & str)=0; virtual void CreatePartC( const string & str)=0; }; class ConcreteBuilder:public Builder { public: ConcreteBuilder() {} ~ConcreteBuilder() {} void CreatePartA(const string & str); void CreatePartB(const string & str); void CreatePartC(const string & str); }; void ConcreteBuilder::CreatePartA(const string & str) { cout<<str<<endl; } void ConcreteBuilder::CreatePartB(const string & str) { cout<<str<<endl; } void ConcreteBuilder::CreatePartC(const string & str) { cout<<str<<endl; } class Director { public: Director(Builder *bld) { _bld=bld; } ~Director() {} void Construct(); private: Builder *_bld; }; void Director::Construct() { string str; str="Builder PartA"; _bld->CreatePartA(str); str="Builder PartB"; _bld->CreatePartB(str); str="Builder PartC"; _bld->CreatePartC(str); } int main() { Director *drt=new Director(new ConcreteBuilder()); drt->Construct(); return 0; }
ProtoType模式比较简单易用,通常当我们需要创建一个和已有对象一摸一样的对象时,就需要用到这个模式,说到这,很多人可能会想到可以通过拷贝构造函数来实现这种功能。没错!ProtoType的原理就是在拷贝构造函数上下功夫,通过对象的自我拷贝构造来实现之。其UML图示如下:
上图代码实现如下:
#include <iostream> #include <string> using namespace std; class ProtoType { protected: ProtoType() {} ~ProtoType() {} public: virtual ProtoType* Clone()=0; }; class ConcreteProtoType:public ProtoType { public: ConcreteProtoType() {} ~ConcreteProtoType() {} ConcreteProtoType(const ConcreteProtoType & pro); ProtoType* Clone(); }; ConcreteProtoType::ConcreteProtoType(const ConcreteProtoType &pro) { cout<<"ConcreteProtoType..."<<endl; } ProtoType *ConcreteProtoType::Clone() { return new ConcreteProtoType(*this); } int main() { ProtoType *pro1=new ConcreteProtoType(); ProtoType *pro2=pro1->Clone(); return 0; }
相关文章推荐
- java语言实现创建型设计模式—原型模式(Prototype)
- 几种创建型的设计模式概析【上】——Factory模式, AbstractFactory模式,Singleton模式【C++实现】
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现
- 23种设计模式之建造者模式(创建型,4 Builder,c++实现)
- 23种设计模式之原型模式(创建型,5 Prototype,c++实现)
- [创建型设计模式:Builder]代码实现
- 设计模式03: Builder 生成器模式(创建型模式)
- 设计模式--创建型- Builder(生成器/创建者)
- 设计模式之五:BUILDER(生成器)—对象创建型模式
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式之——生产者模式(Builder)和原型模式(Prototype)
- 单例设计模式的几种常见实现方法
- PHP设计模式:创建型之原型模式(Prototype)
- 设计模式--单例模式的几种实现方式
- C++简单实现几种常用的设计模式
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 工厂模式(FactoryMethod) - Java实现
- 设计模式实例解析-创建型模式(Singleton、Abstract Factory、Builder)[转]
- 设计模式学习总结2 - 创建型2 - Builder生成器模式
- 设计模式之C#实现(四)---- ProtoType
- java语言实现创建型设计模式—抽象工厂模式