设计模式----创造者模式

创造者模式

把建造不同类型房子的过程与客户端调用分类,将一个复杂对象的构造与它的表示分离。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。创造者模中存在几个角色:

  1. 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口。
  2. 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
  3. 指挥者(Director):指挥并构造一个使用Builder接口的对象。
  4. 产品(Product):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
    #include <iostream>
    #include <cstring>
    using namespace std;

    class House{
        public:
            void setFloor(string floor){
                this->floor = floor;
            }
            void setWall(string wall){
                this->wall = wall;
            }
            void setDoor(string door){
                this->door = door;
            }
            void show(){
                cout<<wall<<":"<<floor<<":"<<door<<endl;
            }
        private:
            string door;
            string wall;
            string floor;

    };

    class Builder{
        public:
            Builder(){
                this->house = new House();
            }
            virtual ~Builder(){}
            virtual void buildFloor()=0;
            virtual void buildWall()=0;
            virtual void buildDoor()=0;
            virtual House *getHouse(){
                return house;
            }
        protected:
            House *house;
    };

    class BungalowBuilder : public Builder{
        public:
            BungalowBuilder(){}
            virtual ~BungalowBuilder(){
                if(house!=NULL){
                    delete house;
                    house = NULL;
                }
            }
            virtual void buildFloor(){
                house->setFloor("Bungalow floor");
            }
            virtual void buildWall(){
                house->setWall("Bungalow wall");
            }
            virtual void buildDoor(){
                house->setDoor("Bungalow door");
            }
    };

    class thatchedCottageBuilder : public Builder{
        public:
            thatchedCottageBuilder(){}
            virtual ~thatchedCottageBuilder(){
                if(house!=NULL){
                    delete house;
                    house = NULL;
                }
            }
            virtual void buildFloor(){
                house->setFloor("thatchedCottage floor");
            }
            virtual void buildWall(){
                house->setWall("thatchedCottage wall");
            }
            virtual void buildDoor(){
                house->setDoor("thatchedCottage door");
            }
    };

    class Director{
        public:
            Director(Builder *builder){
                this->builder = builder;
            }
            void construct(){
                builder->buildWall();
                builder->buildFloor();
                builder->buildDoor();
            }
        private:
            Builder *builder;
    };

    int main()
    {
        Builder *builder = NULL;
        House *house = NULL;
        Director *director = NULL;

        builder = new BungalowBuilder();
        director = new Director(builder);
        director->construct();
        house = builder->getHouse();
        house->show();
        delete house;
        delete builder;
        delete director;
        return 0;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值