add BuilderPattern code and picture
parent
493c432949
commit
d6ead5544a
|
@ -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 |
|
@ -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__
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue