DesignPattern/04.BuilderPattern/2.Code/BuilderPattern.h

113 lines
1.9 KiB
C
Raw Normal View History

2019-10-19 07:52:26 +00:00
#ifndef __BUILDER_PATTERN__
#define __BUILDER_PATTERN__
#include <iostream>
#include <string.h>
using namespace std;
//<2F><>Ʒ<EFBFBD><C6B7>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;
}
//<2F><>ӡHouse<73><65>Ϣ
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;
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AbstractBall
class AbstractBuilder
{
public:
AbstractBuilder(){
house = new House();
}
//<2F><><EFBFBD>󷽷<EFBFBD><F3B7BDB7><EFBFBD>
virtual void buildFloor() = 0;
virtual void buildWall() = 0;
virtual void buildRoof() = 0;
virtual House *getHouse() = 0;
House *house;
};
//<2F><><EFBFBD><EFBFBD><E5BDA8><EFBFBD><EFBFBD>ConcreteBuilderA
class ConcreteBuilderA :public AbstractBuilder
{
public:
ConcreteBuilderA(){
printf("ConcreteBuilderA\n");
}
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
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;
}
};
//<2F><><EFBFBD><EFBFBD><E5BDA8><EFBFBD><EFBFBD>ConcreteBuilderB
class ConcreteBuilderB :public AbstractBuilder
{
public:
ConcreteBuilderB(){
printf("ConcreteBuilderB\n");
}
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
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;
}
};
//ָ<><D6B8><EFBFBD><EFBFBD>Director
class Director
{
public:
Director(){}
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void setBuilder(AbstractBuilder *iBuilder){
this->builder = iBuilder;
}
House *construct(){
builder->buildFloor();
builder->buildWall();
builder->buildRoof();
return builder->getHouse();
}
private:
AbstractBuilder *builder;
};
#endif //__BUILDER_PATTERN__