设计模式--06建造者模式

建造者模式

定义

建造者模式也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样构建过程可以创建不用的表示。
在这里插入图片描述

  • Product产品类:通常是实现了模板方法方法和基本方法
  • Builder抽象建造者:规范产品的组建,一般是由子类实现
  • ConcreteBuilder具体建造者:实现抽象类定义的所有方法,并返回一个组建好的对象
  • Director导演类:负责安排已有模块的顺序,告诉Builder开始构建

优点

  • 封装性
  • 建造者独立,容易扩展
  • 便于控制细节风险

使用场景

  • 相同的方法,不同的执行顺序,产生不同的时间结果时
  • 对个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能
  • 在对象创建过程中会使用到系统中的一些其他对象

Python实现

# -*- coding: UTF-8 -*-

class Building:
    """Abstract Building"""

    def __init__(self):
        self.build_floor()
        self.build_size()

    def build_floor(self):
        raise NotImplemented

    def build_size(self):
        raise NotImplemented

    def __repr__(self):
        return "Floor:{0.floor} | Size: {0.size}".format(self)


class House(Building):
    def build_floor(self):
        self.floor = "One"

    def build_size(self):
        self.size = "Big"


class Flat(Building):
    def build_floor(self):
        self.floor = "More than One"

    def build_size(self):
        self.size = "Small"


class ComplexBuilding:
    def __repr__(self):
        return "Floor: {0.floor} | Size: {0.size}".format(self)


class ComplexHouse(ComplexBuilding):
    def build_floor(self):
        self.floor = "One"

    def build_size(self):
        self.size = "Big and fancy"


def construct_building(cls):
    building = cls()
    building.build_floor()
    building.build_size()
    return building


def main():
    house = House()
    print(house)  # Floor:One | Size: Big

    flat = Flat()
    print(flat)  # Floor:More than One | Size: Small

    complex_house = construct_building(ComplexHouse)
    print(complex_house)  # Floor: One | Size: Big and fancy


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值