美文网首页Python精耕细作Python点滴
[Python设计模式] 09 - 建造者模式

[Python设计模式] 09 - 建造者模式

作者: 蓝色信仰 | 来源:发表于2015-04-04 21:32 被阅读299次

设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。

建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

基本思想

  • 某类产品的构建由很多复杂组件组成
  • 这些组件中的某些细节不同,构建出的产品表象会略有不同
  • 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建
  • 当需要创建不同的产品时,只需要派生一个具体的建造者,重写相应的组件构建方法即可

代码结构

class Builder(object):
    """基类"""
    def Part1(self):
        # 不同类型的产品,该步骤的细节可能不同
        raise NotImplementedError()      

    def Part2(self):
        # 不同类型的产品,该步骤的细节可能不同
        raise NotImplementedError()

class Builder1(Builder):
    """派生类,生产builder1类型的产品""" 
    def Part1(self):
        print 'builder1 Part1'

    def Part2(self):
        print 'builder1 Part2'

class Builder2(Builder):
    """派生类,生产builder2类型的产品"""
    def Part1(self):
        print 'builder2 Part1'

    def Part2(self):
        print 'builder2 Part2'

class Director(object):
    """指挥者,负责组织产品的构建过程"""
    def Build(self, builder):
        builder.Part1()
        builder.Part2()

def client():
    director = Director()
    director.Build(Builder1())
    director.Build(Builder2())

这里有一个疑问,指挥者这个角色有什么用呢。感觉除了增加client的调用负担外,似乎没什么用处。为什么不把产品构建过程放在Builder基类中呢,像下面这样:

class Builder(object):
    """基类"""
    def Part1(self):
        raise NotImplementedError()      

    def Part2(self):
        raise NotImplementedError()

    def Build(self):
        self.Part1()
        self.Part2()

class Builder1(Builder):
    def Part1(self):
        print 'builder1 Part1'

    def Part2(self):
        print 'builder1 Part2'

class Builder2(Builder):
    def Part1(self):
        print 'builder2 Part1'

    def Part2(self):
        print 'builder2 Part2'

def client():
    Builder1().Build()
    Builder2().Build()

没错,上面就是典型的模板方法模式的实现套路,回顾一下模板方法模式的定义:

模板方法模式:定义一个工作流或算法的基本骨架,而将一些特定步骤的实现延迟到子类中。

模板方法模式更多的关注于算法流程,而建造者模式更多的关注于复杂对象的创建,模板模式应用场景比建造者模式更多一些,写起来也更自然一些。

建造者模式将产品的创建流程提取到指挥者中,建造者则扮演机器人的角色,没有自主意识,只知道按照命令做相应的工作,建造者模式的适应场景有限且明确,在特定场景下的优势是比较明显的。更多关于建造者模式的解释可以参考:

原文地址:http://www.isware.cn/python-design-pattern/09-builder/

相关文章

  • [Python设计模式] 09 - 建造者模式

    设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。 建造者模...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • Python设计模式 - 建造者模式

    """ 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 相关模式:思路和模...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

网友评论

    本文标题:[Python设计模式] 09 - 建造者模式

    本文链接:https://www.haomeiwen.com/subject/fkjaxttx.html