设计模式之建造者模式
2014-08-12 17:39
169 查看
建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。
《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图,以建造小人为实例。
对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。
在DP这本书中给出了更抽象化的一个图像
其中的参与者有:
Builder
----为创建一个Product对象的各个部件指定抽象接口。
ConcreteBuilder
----实现Builder的接口以构造和装配该产品的各个部件。
----定义并明确它所创建的表示
----提供一个检索产品的接口
Director
----构造一个使用Builder接口的对象。
Product
----表示被构造的复杂对象
----包含定义组成部件的类
实现的C++代码如下:
C++ Code
运行结果如下所示:
《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图,以建造小人为实例。
对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。
在DP这本书中给出了更抽象化的一个图像
其中的参与者有:
Builder
----为创建一个Product对象的各个部件指定抽象接口。
ConcreteBuilder
----实现Builder的接口以构造和装配该产品的各个部件。
----定义并明确它所创建的表示
----提供一个检索产品的接口
Director
----构造一个使用Builder接口的对象。
Product
----表示被构造的复杂对象
----包含定义组成部件的类
实现的C++代码如下:
C++ Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | class Builder { public: virtual void BuildHead() {} virtual void BuildBody() {} virtual void BuildLeftArm() {} virtual void BuildRightArm() {} virtual void BuildLeftLeg() {} virtual void BuildRightLeg() {} }; //构造瘦人 class ThinBuilder : public Builder { public: void BuildHead() { cout << "build thin body" << endl; } void BuildBody() { cout << "build thin head" << endl; } void BuildLeftArm() { cout << "build thin leftarm" << endl; } void BuildRightArm() { cout << "build thin rightarm" << endl; } void BuildLeftLeg() { cout << "build thin leftleg" << endl; } void BuildRightLeg() { cout << "build thin rightleg" << endl; } }; //构造胖人 class FatBuilder : public Builder { public: void BuildHead() { cout << "build fat body" << endl; } void BuildBody() { cout << "build fat head" << endl; } void BuildLeftArm() { cout << "build fat leftarm" << endl; } void BuildRightArm() { cout << "build fat rightarm" << endl; } void BuildLeftLeg() { cout << "build fat leftleg" << endl; } void BuildRightLeg() { cout << "build fat rightleg" << endl; } }; //构造的指挥官 class Director { private: Builder *m_pBuilder; public: Director(Builder *builder) { m_pBuilder = builder; } void Create() { m_pBuilder->BuildHead(); m_pBuilder->BuildBody(); m_pBuilder->BuildLeftArm(); m_pBuilder->BuildRightArm(); m_pBuilder->BuildLeftLeg(); m_pBuilder->BuildRightLeg(); } }; int main() { FatBuilder thin; Director director(&thin); director.Create(); return 0; } |
相关文章推荐
- 设计模式学习笔记之建造者模式
- 设计模式---建造者模式
- 设计模式之 建造者模式
- 设计模式:建造者模式
- 每天一设计模式之建造者模式
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式笔记(九) —— 建造者模式
- 设计模式之建造者模式
- 我读设计模式之建造者模式(Builder Pattern)
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 设计模式---建造者(Builder)模式,有关系图
- .NET设计模式(4):建造者模式(Builder Pattern)
- .NET设计模式(4):建造者模式(Builder Pattern)
- Java设计模式-----Builder建造者模式
- .NET设计模式(4):建造者模式(Builder Pattern)
- DOTA版设计模式——建造者
- C#设计模式之建造者(Builder)模式示例源代码