创建型模式之建造者模式实现
来源:互联网 发布:淘宝宝贝宣言 编辑:程序博客网 时间:2024/06/05 07:17
概念
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法。
角色和职责
1) Builder:为创建产品各个部分,统一抽象接口。
2) ConcreteBuilder:具体的创建产品的各个部分,部分A, 部分B,部分C。
3) Director:构造一个使用Builder接口的对象。
4) Product:表示被构造的复杂对象。
ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
适用情况:
一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。
工厂模式和建造者模式区别
Factory模式中:
1、有一个抽象的工厂。
2、实现一个具体的工厂—汽车工厂。
3、工厂生产汽车A,得到汽车产品A。
4、工厂生产汽车B,得到汽车产品B。
这样做,实现了购买者和生产线的隔离。强调的是结果。
Builder模式:
1、引擎工厂生产引擎产品,得到汽车部件A。
2、轮胎工厂生产轮子产品,得到汽车部件B。
3、底盘工厂生产车身产品,得到汽车部件C。
4、将这些部件放到一起,形成刚好能够组装成一辆汽车的整体。
5、将这个整体送到汽车组装工厂,得到一个汽车产品。
这样做,目的是为了实现复杂对象生产线和其部件的解耦。强调的是过程。
两者的区别在于:
Factory模式不考虑对象的组装过程,而直接生成一个我想要的对象。
Builder模式先一个个的创建对象的每一个部件,再统一组装成一个对象。
Factory模式所解决的问题是,工厂生产产品。
而Builder模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品生成器中得到产品。
Builder模式不是很常用。模式本身就是一种思想。知道了就可以了。
设计模式就是一种思想。学习一个模式,花上一两个小时把此模式的意思理解了,就够了。其精华的所在会在以后工作的设计中逐渐体现出来。
案例
#include <iostream>#include <string.h>using namespace std;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; } string getFloor() { return m_floor; } string getWall() { return m_wall; } string getDoor() { return m_door; }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 FlatBuilder :public Builder{public: FlatBuilder() { pHouse = new House; } virtual void makeFloor() { pHouse->setFloor("FlatDoor"); } virtual void makeWall() { pHouse->setWall("FlatWall"); } virtual void makeDoor() { pHouse->setDoor("FlatDoor"); } virtual House *GetHouse() { return pHouse; }private: House *pHouse;};//别墅class VillaBuilder :public Builder{public: VillaBuilder() { pHouse = new House; } virtual void makeFloor() { pHouse->setFloor("VillaDoor"); } virtual void makeWall() { pHouse->setWall("VillaWall"); } virtual void makeDoor() { pHouse->setDoor("VillaDoor"); } virtual House *GetHouse() { return pHouse; }private: House *pHouse;};class Director{public: void Construct(Builder *builder) { builder->makeDoor(); builder->makeWall(); builder->makeFloor(); }};int main(void){ //客户直接建造房子 House *pHouse = new House(); pHouse->setDoor("门"); pHouse->setFloor("地板"); pHouse->setWall("墙"); delete pHouse; ////工程队直接建造房子 //Builder *builder = new FlatBuilder(); //builder->makeWall(); //builder->makeFloor(); //builder->makeDoor(); //指挥者(设计师)指挥 工程队 和建房子 Director *director = new Director(); //建公寓 Builder *builder = new FlatBuilder(); director->Construct(builder); House *house = builder->GetHouse(); cout << house->getFloor().c_str() << endl; delete house; delete builder; //建别墅 builder = new VillaBuilder(); director->Construct(builder); house = builder->GetHouse(); cout << house->getFloor().c_str() << endl; delete house; delete builder; return 0;}
- 创建型模式之建造者模式实现
- 创建型模式之建造者模式
- 创建型模式之建造者模式
- 创建型模式之建造者模式
- 创建型模式之建造者模式
- 设计模式之创建型模式---建造者模式
- Java设计模式之创建型模式--建造者模式
- 创建型模式之建造者模式(生成器模式)
- 创建型之建造者模式
- 创建模式之二 建造者模式
- 建造者模式——创建型模式之三
- 创建型模式之建造者模式(Builder)
- 创建型模式之建造者(Builder)模式
- 创建型模式之建造者模式(Builder)
- 设计模式(创建型)之建造者模式(Builder Pattern)
- 设计模式-创建型之建造者模式
- 创建型模式之四——建造者模式
- Python的创建型设计模式之建造者模式
- 让Hibernate识别数据库特有字段
- Android_studio布局
- Android布局
- javascript 数组去重的n种解法
- maven-pom-scope
- 创建型模式之建造者模式实现
- 操作系统总结
- UUID详解,uuid在线生成
- spring的pojo类属性的注入
- [勇者闯LeetCode] 167. Two Sum II
- CSS基础布局
- 阿里云WindowsServer2012安装IIS失败解决办法
- 五花八门实现元素居中
- 第2章 魅力领导的迷思