diff --git a/3.AbstractFactory/2.Code/main.cpp b/3.AbstractFactory/2.Code/main.cpp index 706b45b..1a9659e 100644 --- a/3.AbstractFactory/2.Code/main.cpp +++ b/3.AbstractFactory/2.Code/main.cpp @@ -3,9 +3,6 @@ int main() { - printf("工厂方法模式\n"); - - //定义工厂类对象和产品类对象 AbstractFactory *fac = NULL; AbstractBall *ball = NULL; AbstractShirt *shirt = NULL; diff --git a/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML鍥.png b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML鍥.png new file mode 100644 index 0000000..c832971 Binary files /dev/null and b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML鍥.png differ diff --git a/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML瀹炰緥鍥.png b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML瀹炰緥鍥.png new file mode 100644 index 0000000..c5e5a73 Binary files /dev/null and b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮廢ML瀹炰緥鍥.png differ diff --git a/4.BuilderPattern/1.Picture/寤洪犺呮ā寮忓疄渚嬪浘.png b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮忓疄渚嬪浘.png new file mode 100644 index 0000000..0a26388 Binary files /dev/null and b/4.BuilderPattern/1.Picture/寤洪犺呮ā寮忓疄渚嬪浘.png differ diff --git a/4.BuilderPattern/2.Code/BuilderPattern.h b/4.BuilderPattern/2.Code/BuilderPattern.h new file mode 100644 index 0000000..2272c87 --- /dev/null +++ b/4.BuilderPattern/2.Code/BuilderPattern.h @@ -0,0 +1,113 @@ +#ifndef __BUILDER_PATTERN__ +#define __BUILDER_PATTERN__ + +#include +#include +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__ \ No newline at end of file diff --git a/4.BuilderPattern/2.Code/main.cpp b/4.BuilderPattern/2.Code/main.cpp new file mode 100644 index 0000000..5a24d22 --- /dev/null +++ b/4.BuilderPattern/2.Code/main.cpp @@ -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; +} \ No newline at end of file diff --git a/README.md b/README.md index 5d77877..f23da1d 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,8 @@ 06.璁捐妯″紡锛堝叚锛夆斺旀娊璞″伐鍘傛ā寮 -鍗氬鍦板潃锛歨ttps://blog.csdn.net/sinat_21107433/article/details/102618384 \ No newline at end of file +鍗氬鍦板潃锛歨ttps://blog.csdn.net/sinat_21107433/article/details/102618384 + +07.璁捐妯″紡锛堜竷锛夆斺斿缓閫犺呮ā寮 + +鍗氬鍦板潃锛歨ttps://blog.csdn.net/sinat_21107433/article/details/102635881 \ No newline at end of file