zoukankan      html  css  js  c++  java
  • 创建者模式

    意图:
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
     
    适用性:
    当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
    当构造过程必须允许被构造的对象有不同的表示时。
     
    示例代码:
    #-*- coding:utf-8 -*-
    '''
    Builder
    '''
    #建造者模式 
    #相关模式:思路和模板方法模式很像,模板方法是封装算法流程,对某些细节,提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现。
    # 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。
    # 基本思想
    # 某类产品的构建由很多复杂组件组成;
    # 这些组件中的某些细节不同,构建出的产品表象会略有不同;
    # 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建;
    # 当需要创建不同的产品时,只需要派生一个具体的建造者,重写相应的组件构建方法即可。
     
    def printInfo(info):
        print(info)
     
    #建造者基类
    class PersonBuilder():
        def BuildHead(self):
            pass
     
        def BuildBody(self):
            pass
     
        def BuildArm(self):
            pass
     
        def BuildLeg(self):
            pass
     
    #胖子
    class PersonFatBuilder(PersonBuilder):
        type = '胖子'
        def BuildHead(self):
            printInfo("构建%s的大。。。。。头" % self.type)
     
        def BuildBody(self):
            printInfo("构建%s的身体" % self.type)
     
        def BuildArm(self):
            printInfo("构建%s的手" % self.type)
     
        def BuildLeg(self):
            printInfo("构建%s的脚" % self.type)
     
    #瘦子
    class PersonThinBuilder(PersonBuilder):
        type = '瘦子'
        def BuildHead(self):
            printInfo("构建%s的头" % self.type)
     
        def BuildBody(self):
            printInfo("构建%s的身体" % self.type)
     
        def BuildArm(self):
            printInfo("构建%s的手" % self.type)
     
        def BuildLeg(self):
            printInfo("构建%s的脚" % self.type)
     
    #指挥者
    class PersonDirector():
        pb = None;
        def __init__(self, pb):
            self.pb = pb
     
        def CreatePereson(self):
            self.pb.BuildHead()
            self.pb.BuildBody()
            self.pb.BuildArm()
            self.pb.BuildLeg()
     
    def clientUI():
        pb = PersonThinBuilder()
        pd = PersonDirector(pb)
        pd.CreatePereson()
     
        pb2 = PersonFatBuilder()
        #pd = PersonDirector(pb)
        pd.pb = pb2
        pd.CreatePereson()
        return
    
    if __name__ == '__main__':
        clientUI();
    执行结果:
    personBuilder(父类 or 基类)
    PersonFatBuilder(personBuilder的子类 or派生类):作用为创建一个胖子的身体部位
    PersonThinBuilder(personBuilder的子类 or派生类):作用为创建一个瘦子的身体部位
    PersonDirector(新式类):作用为根据personBuilder子类对象(如PersonFatBuilder())让其创建其身体部位
     

  • 相关阅读:
    HDOJ 1069_大二写
    HDOJ 2037:今年暑假不AC_大二写
    第二次HDOJ:1058
    HDOJ 1019
    第二次 HDOJ 1003
    第二次做HDOJ 1051
    memset()的用法
    数据结构中的频度含义
    程序框图的书写
    python课堂整理22----装饰器进阶
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123973.html
Copyright © 2011-2022 走看看