Python设计模式-建造者模式
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设计模式-建造者模式相关推荐
- Python 设计模式 - 建造者模式
精通Python设计模式第二版 第 2 章 建造者模式 学习笔记 建造者模式 假设我们要创建一个由对各部分组成的独享,而且创建过程需要一步一步地完成.只有创建了所有的部分,该对象才是完成的.这种需求可 ...
- Python设计模式-状态模式
Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
最新文章
- c语言输出n以内完数,c语言:输入n,输出不超过n的全部完全数。能帮忙找出怎么错么?...
- rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞
- mathcal 对应于什么库_如何快速构建React组件库
- 大学生一定记得要做的十八件事情
- dns被自动修改_怎么加速iTunes下载速度 设置DNS方法【介绍】
- vuex 基本入门和使用(一)
- 使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
- Redis高可用:主从复制及哨兵模式
- linux7 samba,Centos 7使用Samba实现文件共享
- Python集合常用函数使用详解(内附详细案例)
- 学生用计算机没电了,cfa计算器没电了怎么办
- 选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘
- Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition阅读笔记
- Android开发,app多种语言包
- 想当然很可怕,根子还是思考上的懒惰
- 欢迎大家来到第二期【产品家·实战营】
- jacob java excel_12、借助Jacob实现Java打印报表(Excel、Word)
- 从史前到现在 三百八十年 计算机编年史(转)
- dsa数字签名算法_密码学中的数字签名算法(DSA)
- 普华永道java面试_新鲜的普华永道面试题来了,四大求职必看
热门文章
- AI 监视打工人,这个国家明确说:保护我方“摸鱼权”!
- 一文详解 RNN 及股票预测实战(Python)!
- 华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
- 44岁的微软如何刷新未来?
- 那些打着AI万金油旗号的产品欺骗大众,如何识别?
- 深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解
- AI时代,谈数据分析时我们要谈些什么?
- AI一分钟|研究人员证明“金钱真的可以买到快乐”;特斯拉中国梦面临威胁
- JDK 8 Stream 数据流效率怎么样?
- 非常有必要了解的Springboot启动扩展点