23种设计模式之(四)建造者模式(python_c++实现)

23种设计模式之(四)建造者模式(Builder)

本文主要介绍23种设计模式之建造者模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接


建造者模式(Builder)

概念

建造者模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

建造者模式是为对象的创建而设计的模式:
(1)创建的是一个复合对象,被创建的对象为一个具有复合属性的复合对象 ;
(2)关注对象创建的各部分的创建过程,不同的工厂对产品属性有不同的创建方法

GoF对建造者模式的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

应用场景

一个类的各个组成部分的具体实现类或者算法经常面临着变化,但是将他们组合在一起的算法却相对稳定,提供一种封装机制 将稳定的组合算法于易变的各个组成部分隔离开来。

代码示例

C++代码示例

/************************************************************************/
/* 设计模式专题
/*
/* 建造者模式
/*
/* Author  : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date    : 20180914
/************************************************************************/

#include <iostream>
#include "string"

class House
{
public:
    void setDoor(std::string door)
    {
        this->m_door = door;
    }

    void setWall(std::string wall)
    {
        this->m_wall = wall;
    }

    void setWindow(std::string window)
    {
        this->m_window = window;
    }

    std::string getDoor( )
    {
        printf("%s\n",m_door.c_str());
        return this->m_door ;
    }

    std::string getWall()
    {
        printf("%s\n",m_wall.c_str());
        return this->m_wall;
    }

    std::string getWindow()
    {
        printf("%s\n",m_window.c_str());
        return m_window;
    }

private:
    std::string m_door;
    std::string m_wall;
    std::string m_window;
};

class  Builder
{
public:
    virtual void buildWall() = 0;
    virtual void buildDoor() = 0;
    virtual void buildWindow() = 0;
    virtual House* getHouse() = 0;
};

//公寓工程队
class  FlatBuilder : public Builder
{
public:
    FlatBuilder()
    {
        m_house = new House;
    }
    virtual void buildWall()
    {
        m_house->setWall(" flat wall");
    }

    virtual void buildDoor()
    {
        m_house->setDoor("flat door");
    }

    virtual void buildWindow()
    {
        m_house->setWindow("flat window");
    }

    virtual House* getHouse()
    {
        return m_house;
    }
private:
    House *m_house;
};

//别墅 villa 工程队
class  VillaBuilder : public Builder
{
public:
    VillaBuilder()
    {
        m_house = new House;
    }
    virtual void buildWall()
    {
        m_house->setWall(" villa wall");
    }

    virtual void buildDoor()
    {
        m_house->setDoor("villa door");
    }

    virtual void buildWindow()
    {
        m_house->setWindow("villa window");
    }

    virtual House* getHouse()
    {
        return m_house;
    }
private:
    House *m_house;
};

//设计师(指挥者) 负责建造逻辑  
//建筑队 干具体的活
class Director 
{
public:
    Director( Builder * build)
    {
        m_build = build;
    }
    void Construct()
    {
        m_build->buildWall();
        m_build->buildWindow();
        m_build->buildDoor();
    }
private:
    Builder * m_build;
};


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

    // 请一个建造别墅的工程队
    builder = new VillaBuilder;

    //设计师 指挥 工程队 干活
    director = new Director(builder);
    director->Construct(); 
    house  =  builder->getHouse();
    house->getWindow();
    house->getDoor();

    delete house;
    delete builder;

    //请 FlatBuilder 公寓
    builder = new FlatBuilder;
    director = new Director(builder);
    director->Construct(); 
    house  =  builder->getHouse();
    house->getWindow();
    house->getDoor();

    delete house;
    delete builder;
    delete director;

}

python代码示例

# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
# 
# 建造者模式
# 
# Author  : zzl
# 
# 编程环境: window10 python2.7
# 
# Date    : 20180914
##################################################################

class House(object):
    def __init__(self):
        self.door = ""
        self.wall = ""
        self.window = ""

    def show_door(self):
        print(self.door)

    def show_wall(self):
        print(self.wall)

    def show_window(self):
        print(self.window)


class Builder(object):
    def __init__(self):
        self.house = None

    def build_wall(self):
        pass

    def build_door(self):
        pass

    def build_window(self):
        pass

    def get_house(self):
        return self.house


# 公寓工程队
class FlatBuilder(Builder):
    def __init__(self):
        self.house = House()

    def build_wall(self):
        self.house.wall = "flat wall"

    def build_door(self):
        self.house.door = "flat door"

    def build_window(self):
        self.house.window = "flat window"

    def get_house(self):
        return self.house


# 别墅villa工程队


class VillaBuilder(Builder):
    def __init__(self):
        self.house = House()

    def build_wall(self):
        self.house.wall = "villa wall"

    def build_door(self):
        self.house.door = "villa door"

    def build_window(self):
        self.house.window = "villa window"

    def get_house(self):
        return self.house


# 设计师(指挥者)负责建造逻辑
# 建筑队干具体的活


class Director(object):
    def __init__(self, builder):
        self.builder = builder

    def construct(self):
        self.builder.build_wall()
        self.builder.build_door()
        self.builder.build_window()


if __name__ == "__main__":
    # 请一个建造别墅的工程队
    builder = VillaBuilder()

    # 设计师指挥工程队干活
    director = Director(builder)
    director.construct()
    house = builder.get_house()
    house.show_door()
    house.show_wall()
    house.show_window()

    # 请公寓FlatBuilder
    builder = FlatBuilder()
    director = Director(builder)
    director.construct()
    house = builder.get_house()
    house.show_door()
    house.show_wall()
    house.show_window()

源码链接

设计模式(四)建造者模式示例代码(python–c++)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值