add BuilderPattern code and picture

master
FengJungle 2019-10-19 15:52:26 +08:00
parent 493c432949
commit d6ead5544a
7 changed files with 144 additions and 4 deletions

View File

@ -3,9 +3,6 @@
int main()
{
printf("工厂方法模式\n");
//定义工厂类对象和产品类对象
AbstractFactory *fac = NULL;
AbstractBall *ball = NULL;
AbstractShirt *shirt = NULL;

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 KiB

View File

@ -0,0 +1,113 @@
#ifndef __BUILDER_PATTERN__
#define __BUILDER_PATTERN__
#include <iostream>
#include <string.h>
using namespace std;
//产品类House
class House
{
public:
House(){}
void setFloor(string iFloor){
this->floor = iFloor;
}
void setWall(string iWall){
this->wall = iWall;
}
void setRoof(string iRoof){
this->roof = iRoof;
}
//打印House信息
void printfHouseInfo(){
printf("Floor:%s\t\n", this->floor.c_str());
printf("Wall:%s\t\n", this->wall.c_str());
printf("Roof:%s\t\n", this->roof.c_str());
}
private:
string floor;
string wall;
string roof;
};
//抽象建造者AbstractBall
class AbstractBuilder
{
public:
AbstractBuilder(){
house = new House();
}
//抽象方法:
virtual void buildFloor() = 0;
virtual void buildWall() = 0;
virtual void buildRoof() = 0;
virtual House *getHouse() = 0;
House *house;
};
//具体建造者ConcreteBuilderA
class ConcreteBuilderA :public AbstractBuilder
{
public:
ConcreteBuilderA(){
printf("ConcreteBuilderA\n");
}
//具体实现方法
void buildFloor(){
this->house->setFloor("Floor_A");
}
void buildWall(){
this->house->setWall("Wall_A");
}
void buildRoof(){
this->house->setRoof("Roof_A");
}
House *getHouse(){
return this->house;
}
};
//具体建造者ConcreteBuilderB
class ConcreteBuilderB :public AbstractBuilder
{
public:
ConcreteBuilderB(){
printf("ConcreteBuilderB\n");
}
//具体实现方法
void buildFloor(){
this->house->setFloor("Floor_B");
}
void buildWall(){
this->house->setWall("Wall_B");
}
void buildRoof(){
this->house->setRoof("Roof_B");
}
House *getHouse(){
return this->house;
}
};
//指挥者Director
class Director
{
public:
Director(){}
//具体实现方法
void setBuilder(AbstractBuilder *iBuilder){
this->builder = iBuilder;
}
House *construct(){
builder->buildFloor();
builder->buildWall();
builder->buildRoof();
return builder->getHouse();
}
private:
AbstractBuilder *builder;
};
#endif //__BUILDER_PATTERN__

View File

@ -0,0 +1,26 @@
#include "BuilderPattern.h"
int main()
{
//녜蹶쉔芚諒
AbstractBuilder *builder;
//寧뿐諒
Director *director = new Director();
//끓틔House
House *house;
//寧땍야竟쉔芚諒A
builder = new ConcreteBuilderA();
director->setBuilder(builder);
house = director->construct();
house->printfHouseInfo();
//寧땍야竟쉔芚諒B
builder = new ConcreteBuilderB();
director->setBuilder(builder);
house = director->construct();
house->printfHouseInfo();
system("pause");
return 0;
}

View File

@ -23,4 +23,8 @@
06.设计模式(六)——抽象工厂模式
博客地址https://blog.csdn.net/sinat_21107433/article/details/102618384
博客地址https://blog.csdn.net/sinat_21107433/article/details/102618384
07.设计模式(七)——建造者模式
博客地址https://blog.csdn.net/sinat_21107433/article/details/102635881