23种设计模式C++实例之创建者模式
2015-12-11 19:32
465 查看
把建造不同类型房子的过程与客户端调用分类
#include <iostream>
using namespace std;
/*
* 建造者模式
* 对象的创建和对象的表示分离
* */
class House {
public:
void setFloor(string floor) {
m_floor = floor;
}
void setWall(string wall) {
m_wall = wall;
}
void setDoor(string door) {
m_door = door;
}
void show() {
cout << m_floor << endl;
cout << m_wall << endl;
cout << m_door << endl;
}
private:
string m_floor;
string m_wall;
string m_door;
};
class Builder {
public:
virtual ~Builder() {}
virtual void makeFloor() = 0;
virtual void makeWall() = 0;
virtual void makeDoor() = 0;
virtual House* getHouse() = 0;
};
class FlatBuilder: public Builder {
public:
FlatBuilder() {
m_house = new House();
}
virtual ~FlatBuilder() {
if (m_house != NULL) {
delete m_house;
m_house = NULL;
}
}
void makeFloor() {
m_house->setFloor("flat floor");
}
void makeWall() {
m_house->setWall("flat wall");
}
void makeDoor() {
m_house->setDoor("flat door");
}
House* getHouse() {
return m_house;
}
private:
House* m_house;
};
class VillaBuilder: public Builder {
public:
VillaBuilder() {
m_house = new House();
}
virtual ~VillaBuilder() {
if (m_house != NULL) {
delete m_house;
m_house = NULL;
}
}
void makeFloor() {
m_house->setFloor("villa floor");
}
void makeWall() {
m_house->setWall("villa wall");
}
void makeDoor() {
m_house->setDoor("villa door");
}
House* getHouse() {
return m_house;
}
private:
House* m_house;
};
class Director {
public:
Director(Builder* builder) {
m_builder = builder;
}
void construct() {
m_builder->makeFloor();
m_builder->makeWall();
m_builder->makeDoor();
}
private:
Builder* m_builder;
};
int main() {
Director* director = NULL;
Builder* builder = NULL;
House* house = NULL;
builder = new VillaBuilder;
director = new Director(builder);
director->construct();
house = builder->getHouse();
house->show();
delete builder;
delete director;
builder = new FlatBuilder;
director = new Director(builder);
director->construct();
house = builder->getHouse();
house->show();
delete builder;
delete director;
return 0;
}
#include <iostream>
using namespace std;
/*
* 建造者模式
* 对象的创建和对象的表示分离
* */
class House {
public:
void setFloor(string floor) {
m_floor = floor;
}
void setWall(string wall) {
m_wall = wall;
}
void setDoor(string door) {
m_door = door;
}
void show() {
cout << m_floor << endl;
cout << m_wall << endl;
cout << m_door << endl;
}
private:
string m_floor;
string m_wall;
string m_door;
};
class Builder {
public:
virtual ~Builder() {}
virtual void makeFloor() = 0;
virtual void makeWall() = 0;
virtual void makeDoor() = 0;
virtual House* getHouse() = 0;
};
class FlatBuilder: public Builder {
public:
FlatBuilder() {
m_house = new House();
}
virtual ~FlatBuilder() {
if (m_house != NULL) {
delete m_house;
m_house = NULL;
}
}
void makeFloor() {
m_house->setFloor("flat floor");
}
void makeWall() {
m_house->setWall("flat wall");
}
void makeDoor() {
m_house->setDoor("flat door");
}
House* getHouse() {
return m_house;
}
private:
House* m_house;
};
class VillaBuilder: public Builder {
public:
VillaBuilder() {
m_house = new House();
}
virtual ~VillaBuilder() {
if (m_house != NULL) {
delete m_house;
m_house = NULL;
}
}
void makeFloor() {
m_house->setFloor("villa floor");
}
void makeWall() {
m_house->setWall("villa wall");
}
void makeDoor() {
m_house->setDoor("villa door");
}
House* getHouse() {
return m_house;
}
private:
House* m_house;
};
class Director {
public:
Director(Builder* builder) {
m_builder = builder;
}
void construct() {
m_builder->makeFloor();
m_builder->makeWall();
m_builder->makeDoor();
}
private:
Builder* m_builder;
};
int main() {
Director* director = NULL;
Builder* builder = NULL;
House* house = NULL;
builder = new VillaBuilder;
director = new Director(builder);
director->construct();
house = builder->getHouse();
house->show();
delete builder;
delete director;
builder = new FlatBuilder;
director = new Director(builder);
director->construct();
house = builder->getHouse();
house->show();
delete builder;
delete director;
return 0;
}
相关文章推荐
- 23种设计模式C++实例之抽象工厂模式
- 23种设计模式C++实例之工厂方法模式
- 【codeforces 115E】Linear Kingdom Races 题意&题解&代码(c++)
- 23种设计模式C++实例之概述
- C++学习笔记(初级篇)——作用域与“extern”关键字
- C++关联容器的一些细节
- C++入门(2):操作符和控制结构
- C/C++内存泄漏及检测
- C++中值传递、指针传递、引用传递的总结
- C++11 学习笔记 列表初始化
- 关于C++Builder调用MySQL数据库中文乱码问题
- C++读写dbf文件头,向第12-13字节里添加两个校验字符
- 用于ARM上的FFT与IFFT源代码(C语言,不依赖特定平台)
- C/C++常用算法【C语言顺序查找(顺序表)】【2】
- 使用C++名单在文档处理和学生成绩管理系统相结合
- C++ primer札记10-继承
- c++ 空指针错误
- c++调用c文件的函数
- c++ 异常 warning: 'MEMORY_UNIT_NAME' defined but not used
- CSV文件C++操作库:MiniCSV