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)
  • 相关阅读:
    IntelliJIDEA永久注册使用
    并行设计模式(二)-- Master-Worker模式
    Guava之CaseFormat
    solr6.3.0升级与IK动态词库自动加载
    算法思维
    并发库应用之一 & ThreadLocal实现线程范围的共享变量
    filecoin里程碑事件
    博客园 增加打赏功能
    session-token-cookie讲解
    golang原生的RPC实现
  • 原文地址:https://www.cnblogs.com/navysummer/p/9835101.html
Copyright © 2011-2022 走看看