C++设计模式基础教程(7)

2018-11-17 18:52

31

建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

角色和职责

1) Builder:为创建产品各个部分,统一抽象接口。

2) ConcreteBuilder:具体的创建产品的各个部分,部分A, 部分B,部分C。 3) Director:构造一个使用Builder接口的对象。 4) Product:表示被构造的复杂对象。

ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

适用情况:

一个对象的构建比较复杂,将一个对象的构建(?)和对象的表示(?)进行分离。

创建者模式和工厂模式的区别

Factory模式中:

1、有一个抽象的工厂。

2、实现一个具体的工厂---汽车工厂。 3、工厂生产汽车A,得到汽车产品A。

32

4、工厂生产汽车B,得到汽车产品B。

这样做,实现了购买者和生产线的隔离。强调的是结果。

Builder模式:

1、引擎工厂生产引擎产品,得到汽车部件A。 2、轮胎工厂生产轮子产品,得到汽车部件B。 3、底盘工厂生产车身产品,得到汽车部件C。

4、将这些部件放到一起,形成刚好能够组装成一辆汽车的整体。 5、将这个整体送到汽车组装工厂,得到一个汽车产品。

这样做,目的是为了实现复杂对象生产线和其部件的解耦。强调的是过程 两者的区别在于:

Factory模式不考虑对象的组装过程,而直接生成一个我想要的对象。 Builder模式先一个个的创建对象的每一个部件,再统一组装成一个对象。 Factory模式所解决的问题是,工厂生产产品。

而Builder模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品生成器中得到产品。

Builder模式不是很常用。模式本身就是一种思想。知道了就可以了。

设计模式就是一种思想。学习一个模式,花上一两个小时把此模式的意思理解了,就 够了。其精华的所在会在以后工作的设计中逐渐体现出来。

案例

关键字:建公寓工程队 FlatBuild 别墅工程队 VillaBuild 设计者Director #include using namespace std; #include \class House { public: void setFloor(string floor) { this->m_floor = floor; } void setWall(string wall) { this->m_wall = wall; } void setDoor(string door) { this->m_door = door; } 33

// string getFloor() { return m_floor; } string setWall() { return m_wall; } string getDoor() { return m_door; } protected: private: string m_floor; string m_wall; string m_door; }; class Builder { public: virtual void makeFloor() = 0; virtual void makeWall() = 0; virtual void makeDoor() = 0; virtual House *GetHouse() = 0; }; //公寓 class FlatBuild : public Builder { public: FlatBuild() { pHouse = new House; } virtual void makeFloor() { pHouse->setFloor(\ } virtual void makeWall() 34

{ pHouse->setWall(\ } virtual void makeDoor() { pHouse->setDoor(\ } virtual House *GetHouse() { return pHouse; } private: House *pHouse; }; //别墅 class VillaBuild : public Builder { public: VillaBuild() { pHouse = new House; } virtual void makeFloor() { pHouse->setFloor(\ } virtual void makeWall() { pHouse->setWall(\ } virtual void makeDoor() { pHouse->setDoor(\ } virtual House *GetHouse() { return pHouse; } private: House *pHouse; }; 35

class Director { public: void Construct(Builder *builder) { builder->makeFloor(); builder->makeWall(); builder->makeDoor(); } protected: private: }; void main() { //客户直接造房子 House *pHose = new House; pHose->setDoor(\门\ pHose->setFloor(\ pHose->setWall(\ delete pHose; /* //工程队直接造房子 Builder *builder = new FlatBuild; builder->makeFloor(); builder->makeWall(); builder->makeDoor(); */ //指挥者(设计师)指挥 工程队 和 建房子 Director *director = new Director; //建公寓 Builder *builder = new FlatBuild; director->Construct(builder); //设计师 指挥 工程队干活 House *house = builder->GetHouse(); cout << house->getFloor() << endl; delete house; delete builder; //建别墅 builder = new VillaBuild;


C++设计模式基础教程(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二类城市语言文字学校迎检工作要点及分工

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: