深入解析Python设计模式编程中建造者模式的使用

深入解析Python设计模式编程中建造者模式的使用,第1张

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

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

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

代码结构

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()

没错,上面就是典型的模板方法模式的实现套路,回顾一下模板方法模式的定义: > 模板方法模式:定义一个工作流或算法的基本骨架,而将一些特定步骤的实现延迟到子类中。

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

类图

实例

#enCoding=utf-8 # #by panda #建造者模式   def printInfo(info):   print unicode(info,'utf-8').encode('gbk')  #建造者基类 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()      pb = PersonFatBuilder()   pd = PersonDirector(pb)   pd.CreatePereson()   return   if __name__ == '__main__':   clIEntUI(); 

总结

以上是内存溢出为你收集整理的深入解析Python设计模式编程中建造者模式的使用全部内容,希望文章能够帮你解决深入解析Python设计模式编程中建造者模式的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1204578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存