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())让其创建其身体部位
     

  • 相关阅读:
    前端常见跨域解决方案
    VS单元测试--初级篇
    高等数学思路
    二元函数求极值判别式AC-B^2
    向量积详解
    伯努利分布均值和方差
    两个标准正态随机变量相乘的方差
    a分位数与双侧a分位数
    中心极限定理概念理解与记忆
    样本方差概念解析
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123973.html
Copyright © 2011-2022 走看看