创建型模式 建造者模式
Posted 云水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型模式 建造者模式相关的知识,希望对你有一定的参考价值。
创建型模式 建造者模式
1) Builder:为创建产品各个部分,统一抽象接口。
2) ConcreteBuilder:具体的创建产品的各个部分,部分A, 部分B,部分C。
3) Director:构造一个使用Builder接口的对象。
4) Product:表示被构造的复杂对象。
ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
适用情况:一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。
/** * 创建型模式 建造者模式 * Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。 * Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 * 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象 * 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法 * */ #include <iostream> #include <string> // 表示被构造的复杂对象 class House { public: void setFloor(std::string floor) { this->m_floor = floor; } void setWall(std::string wall) { this->m_wall = wall; } void setDoor(std::string door) { this->m_door = door; } std::string getFloor() { return m_floor; } std::string getWall() { return m_wall; } std::string getDoor() { return m_door; } private: std::string m_floor; std::string m_wall; std::string m_door; }; // 设计师 为创建产品各个部分,统一抽象接口。 class Builder { public: virtual void makeFloor() = 0; virtual void makeWall() = 0; virtual void makeDoor() = 0; virtual House * getHouse() = 0; virtual ~Builder() {} }; // 公寓施工队 class FlatBuild: public Builder { public: FlatBuild() { pHouse = new House; } ~FlatBuild() { delete pHouse; pHouse = nullptr; } virtual void makeFloor() override { pHouse->setFloor("Flat Floor"); } virtual void makeWall() override { pHouse->setWall("Flat Wall"); } virtual void makeDoor() override { pHouse->setDoor("Flat Door"); } virtual House * getHouse() override { return pHouse; } private: House *pHouse; }; // 别墅施工队 class VillBuild: public Builder { public: VillBuild() { pHouse = new House; } ~VillBuild() { delete pHouse; pHouse = nullptr; } virtual void makeFloor() override { pHouse->setFloor("Vill Floor"); } virtual void makeWall() override { pHouse->setWall("Vill Wall"); } virtual void makeDoor() override { pHouse->setDoor("Vill Door"); } virtual House * getHouse() override { return pHouse; } private: House *pHouse; }; // 指挥者按照设计师的要求进行指挥 // 依赖关系,依赖设计师 class Director { public: void doConstruct(Builder * builder) { builder->makeFloor(); builder->makeWall(); builder->makeDoor(); } }; void mytest() { // 客户直接造房子 House * pHouse = new House(); pHouse->setFloor("diy floor"); pHouse->setWall("diy wall"); pHouse->setDoor("diy door"); std::cout << pHouse->getFloor().c_str() << std::endl; std::cout << pHouse->getWall().c_str() << std::endl; std::cout << pHouse->getDoor().c_str() << std::endl; delete pHouse; pHouse = nullptr; // 指挥者按照设计师的要求进行指挥 Director * director = new Director(); Builder * builder = nullptr; builder = new FlatBuild(); director->doConstruct(builder); // 指挥者指挥工程队施工 pHouse = builder->getHouse(); std::cout << pHouse->getFloor().c_str() << std::endl; std::cout << pHouse->getWall().c_str() << std::endl; std::cout << pHouse->getDoor().c_str() << std::endl; delete builder; builder = nullptr; pHouse = nullptr; builder = new VillBuild(); director->doConstruct(builder); // 指挥者指挥工程队施工 pHouse = builder->getHouse(); std::cout << pHouse->getFloor().c_str() << std::endl; std::cout << pHouse->getWall().c_str() << std::endl; std::cout << pHouse->getDoor().c_str() << std::endl; delete builder; builder = nullptr; pHouse = nullptr; delete director; director = nullptr; return; } int main() { mytest(); system("pause"); return 0; }
以上是关于创建型模式 建造者模式的主要内容,如果未能解决你的问题,请参考以下文章