zoukankan      html  css  js  c++  java
  • Builder(建造者)

    意图:

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    适用性:

    当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

    当构造过程必须允许被构造的对象有不同的表示时。

    #!/usr/bin/python
    #coding:utf8
     
    """
        Builder
    """
     
    # Director
    class Director(object):
        def __init__(self):
            self.builder = None
     
        def construct_building(self):
            self.builder.new_building()
            self.builder.build_floor()
            self.builder.build_size()
     
        def get_building(self):
            return self.builder.building
     
     
    # Abstract Builder
    class Builder(object):
        def __init__(self):
            self.building = None
     
        def new_building(self):
            self.building = Building()
     
     
    # Concrete Builder
    class BuilderHouse(Builder):
        def build_floor(self):
            self.building.floor = 'One'
     
        def build_size(self):
            self.building.size = 'Big'
     
     
    class BuilderFlat(Builder):
        def build_floor(self):
            self.building.floor = 'More than One'
     
        def build_size(self):
            self.building.size = 'Small'
     
     
    # Product
    class Building(object):
        def __init__(self):
            self.floor = None
            self.size = None
     
        def __repr__(self):
            return 'Floor: %s | Size: %s' % (self.floor, self.size)
     
     
    # Client
    if __name__ == "__main__":
        director = Director()
        director.builder = BuilderHouse()
        director.construct_building()
        building = director.get_building()
        print(building)
        director.builder = BuilderFlat()
        director.construct_building()
        building = director.get_building()
        print(building)
  • 相关阅读:
    RESTful Web服务的操作
    Nginx学习之如何搭建文件防盗链服务
    PostgreSQL10.5安装详细步骤(Win10)
    前端安全系列(一):如何防止XSS攻击?
    【原码笔记】-- protobuf.js 与 Long.js
    【微信开发】-- 发送模板消息
    能编程与会编程
    vue2入坑随记(二) -- 自定义动态组件
    微信上传图片
    vue2入坑随记(一)-- 初始全家桶
  • 原文地址:https://www.cnblogs.com/navysummer/p/9835101.html
Copyright © 2011-2022 走看看