最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:35:36
文档

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

深入解析Python设计模式编程中建造者模式的使用:建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 基本思想 某类产品的构建由很多复杂组件组成; 这些组件中的某些细节不同,构建出的产品表象会略有不同; 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建
推荐度:
导读深入解析Python设计模式编程中建造者模式的使用:建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 基本思想 某类产品的构建由很多复杂组件组成; 这些组件中的某些细节不同,构建出的产品表象会略有不同; 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建
 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

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

代码结构

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设计模式编程中建造者模式的使用:建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 基本思想 某类产品的构建由很多复杂组件组成; 这些组件中的某些细节不同,构建出的产品表象会略有不同; 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top