设计模式之建造者模式
来源:互联网 发布:淘宝网页不能正常显示 编辑:程序博客网 时间:2024/06/05 23:44
建造者模式
题外话:面向对象的一个重要指导思想就是,封装隔离变化的,留出不变的。
特点:一个对象的构建比较复杂,则将对象的构建和对象的表示(要被创建的产品)进行分离。
角色:
Product:所要构建的复杂对象。
Builder:定义创建对象过程的抽象,提供构建不同组成部分的抽象接口。他和产品之间的关系是关联,即拥有一个产品属性的成员变量。
ConcreteBuilder:具体实现Builder中的各个构建子函数。不同的ConcreteBuilder可能有不同的实现方式。
Director:规定对象构建的业务逻辑,即构建步骤的顺序。这里Director聚合了Builder类的指针.
//构建房子:房子本身,工程队,设计师
class House{public:void setDoor(string dor){door=dor;}void setWindow(string win){window=win;}void setWall(string wa){wall=wa;}string getDoor(){cout<<door<<endl;return door;}string getWall(){cout<<wall<<endl;return wall;}string getWindow(){cout<<window<<endl;return window;}private:string door;string window;string wall;};class Builder{public:virtual void makeDoor()=0;virtual void makeWindow()=0;virtual void makeWall()=0;virtual House* getHouse()=0;};class flatBuilder:public Builder{public:flatBuilder(){m_hou=new House;}void makeDoor(){m_hou->setDoor("flat door");}void makeWindow(){m_hou->setWindow("flat window");}void makeWall(){m_hou->setWall("flat wall");}House* getHouse(){return m_hou;};private:House* m_hou;};class villaBuilder:public Builder{public:villaBuilder(){m_hou=new House;}void makeDoor(){m_hou->setDoor("villa door");}void makeWindow(){m_hou->setWindow("villa window");}void makeWall(){m_hou->setWall("villa wall");}House* getHouse(){return m_hou;};private:House* m_hou;};class Designer{public:Designer(Builder* bur):m_bur(bur){}void makeHouse(){m_bur->makeDoor();m_bur->makeWall();m_bur->makeWindow();}private:Builder* m_bur;};
int main(){Builder* build=new villaBuilder;//Builder* build=new flatBuilder;Designer* des= new Designer(build);des->makeHouse();House* house=build->getHouse();house->getDoor();house->getWall();house->getWindow();return 0;}
0 0
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者模式学习
- 设计模式之建造者模式
- 设计模式笔记之---建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- 内核log打印级别
- HDU - 2089 不要62 (数位DP&记忆化dfs)水
- 程序启动原理和UIApplication
- Codeblock安装提示:Can't find compiler executable 无法找到编译器
- HDU 2037 circumgyrate the string(字符串翻转)
- 设计模式之建造者模式
- tomcat启用GZIP压缩
- MySQL 'type=InnoDB' 错误
- Java基础 - 强引用、弱引用、软引用、虚引用
- 实例讲解linux用户,组,文件目录权限
- 基于注解形式的hibernate二级缓存的使用(ehcache)
- 编译windows版nginx-rtmp-module
- Mysql初始安装及配置
- iOS之网络请求的简单封装