Python设计模式-建造者模式

代码基于3.5.2,代码如下;

#coding:utf-8
#建造者模式
class Burger():name = ""price = 0.0def getPrice(self):return self.pricedef setPrice(self,price):self.price = pricedef getName(self):return self.nameclass cheeseBurger(Burger):def __init__(self):self.name = "cheese burger"self.price = 10.0class spicyChickenBurger(Burger):def __init__(self):self.name = "spicy chicken burger"self.price = 15.0class Snack():name = ""price = 0.0type = "SNACK"def getPrice(self):return self.pricedef setPrice(self,price):self.price = pricedef getName(self):return self.nameclass chips(Snack):def __init__(self):self.name = "chips"self.price = 6.0class chickenWings(Snack):def __init__(self):self.name = "chicken wings"self.price = 12.0class Beverage():name = ""price = 0.0type = "BEVERAGE"def getPrice(self):return self.pricedef setPrice(self, price):self.price = pricedef getName(self):return self.nameclass coke(Beverage):def __init__(self):self.name = "coke"self.price = 4.0class milk(Beverage):def __init__(self):self.name = "milk"self.price = 5.0class order():burger = ""snack = ""beverage = ""def __init__(self,orderBuilder):self.burger = orderBuilder.bBurgerself.snack = orderBuilder.bSnackself.beverage = orderBuilder.bBeveragedef show(self):print("Burger:%s"%self.burger.getName())print("Snack:%s"%self.snack.getName())print("Beverage:%s"%self.beverage.getName())class orderBuilder():bBurger = ""bSnack = ""bBeverage = ""def addBurger(self,xBurger):self.bBurger = xBurgerdef addSnack(self, xSnack):self.bSnack = xSnackdef addBeverage(self, xBeverage):self.bBeverage = xBeveragedef build(self):return order(self)if __name__ == "__main__":order_builder = orderBuilder()order_builder.addBurger(spicyChickenBurger())order_builder.addSnack(chips())order_builder.addBeverage(milk())order_builder.build().show()

建造者模式分析与解读

建造者模式

建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,作用是将"构建"和"表示"分离,以达到解耦的作用。

代码解读

该例子基于的需求:客户点餐系统。
1、先定义了Burger类,所有的主餐都是由该类继承而来(cheeseBurger,spicyChickenBurger),定义了Snack类,所有的小吃类都是由该类继承而来(chips,chickenWings),定义了Beverage类,所有的饮料都是由该类继承而来(coke,milk);
2、定义了order类,该类主要生成订单;
3、定义了orderBuilder订单建造者类,分别实现了添加主食addBurger、添加小吃addSnack和添加饮料addBeverage方法,当添加完成后调用build方法来生成订单,从而达到建造订单的目的。

代码运行结果如下:

Burger:spicy chicken burger
Snack:chips
Beverage:milk

建造者模式应用场景:

1、目标对象由组件构成的场景中,适合建造者模式;
2、在具体场景中,对象内部接口需要根据不同的参数而调用顺序有所不同时,可以使用建造者模式。

优缺点分析

优点

1、封装性好,用户可以不知道对象的内部构造和细节,就可以直接建造对象;
2、系统扩展容易;
3、建造者模式易于使用,非常灵活,在构造性的场景中很容易实现"流水线";
4、便于控制细节。

缺点

1、封装的过程对用户不透明。

备注

#建造者模式的通用代码
class product():def __init__(self):self.partsList = []def add(self,part):self.partsList.append(part)def show(self):for part in self.partsList:print(part)class builder():def buildPartA(self):raise NotImplementedErrordef buildPartB(self):raise NotImplementedErrordef getResult(self):raise NotImplementedErrorclass ConcreteBuilder1(builder):def __init__(self):self.product = product()def buildPartA(self):self.product.add("1 A")def buildPartB(self):self.product.add("1 B")def getResult(self):self.product.show()class ConcreteBuilder2(builder):def __init__(self):self.product = product()def buildPartA(self):self.product.add("2 A")def buildPartB(self):self.product.add("2 B")def getResult(self):self.product.show()class director():def construct(self,builder):builder.buildPartA()builder.buildPartB()
if __name__ == "__main__":de = director()b1 = ConcreteBuilder1()b2 = ConcreteBuilder2()de.construct(b1)b1.getResult()de.construct(b2)b2.getResult()

Python设计模式-建造者模式相关推荐

  1. Python 设计模式 - 建造者模式

    精通Python设计模式第二版 第 2 章 建造者模式 学习笔记 建造者模式 假设我们要创建一个由对各部分组成的独享,而且创建过程需要一步一步地完成.只有创建了所有的部分,该对象才是完成的.这种需求可 ...

  2. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  3. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  4. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

  5. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  6. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  7. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  8. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  9. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

最新文章

  1. c语言输出n以内完数,c语言:输入n,输出不超过n的全部完全数。能帮忙找出怎么错么?...
  2. rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞
  3. mathcal 对应于什么库_如何快速构建React组件库
  4. 大学生一定记得要做的十八件事情
  5. dns被自动修改_怎么加速iTunes下载速度 设置DNS方法【介绍】
  6. vuex 基本入门和使用(一)
  7. 使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
  8. Redis高可用:主从复制及哨兵模式
  9. linux7 samba,Centos 7使用Samba实现文件共享
  10. Python集合常用函数使用详解(内附详细案例)
  11. 学生用计算机没电了,cfa计算器没电了怎么办
  12. 选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘
  13. Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition阅读笔记
  14. Android开发,app多种语言包
  15. 想当然很可怕,根子还是思考上的懒惰
  16. 欢迎大家来到第二期【产品家·实战营】
  17. jacob java excel_12、借助Jacob实现Java打印报表(Excel、Word)
  18. 从史前到现在 三百八十年 计算机编年史(转)
  19. dsa数字签名算法_密码学中的数字签名算法(DSA)
  20. 普华永道java面试_新鲜的普华永道面试题来了,四大求职必看

热门文章

  1. AI 监视打工人,这个国家明确说:保护我方“摸鱼权”!
  2. 一文详解 RNN 及股票预测实战(Python)!
  3. 华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
  4. 44岁的微软如何刷新未来?
  5. 那些打着AI万金油旗号的产品欺骗大众,如何识别?
  6. 深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解
  7. AI时代,谈数据分析时我们要谈些什么?
  8. AI一分钟|研究人员证明“金钱真的可以买到快乐”;特斯拉中国梦面临威胁
  9. JDK 8 Stream 数据流效率怎么样?
  10. 非常有必要了解的Springboot启动扩展点