python设计模式(二):建造者模式
建造者,顾名思义是修建建筑的工人,按照基本的施工方式:打桩-浇筑框架-砌墙-装修,同样的施工流程却能造就千差万别的建筑,因为不同的材料、不同设计,可以表现出千差万别,这就是建造者模式的简要理解。
示例代码:
# -*- coding:utf-8 -*-
class Builder():
"""建造流程:原料—施工"""
def __init__(self):
self.materiel = None
self.design = None
def run(self):
print('修建完工!设计建筑: %s | 购买原料: %s' % (self.design, self.materiel))
class A(Builder):
"""方案A,修建毛坯房"""
def get_materiel(self):
self.materiel = "砖瓦"
def get_design(self):
self.design = "毛坯房"
class B(Builder):
"""方案B,修建写字楼"""
def get_materiel(self):
self.materiel = "玻璃"
def get_design(self):
self.design = "写字楼"
class Director:
"""调度:买原料-组织施工"""
def __init__(self):
self.programme = None
def build(self):
self.programme.get_materiel()
print("购买原料:{}".format(self.programme.materiel))
self.programme.get_design()
print("设计方案:{}".format(self.programme.design))
self.programme.run()
if __name__ == '__main__':
# 修建毛坯房
test = Director()
test.programme = A()
test.build()
# 修建写字楼
test = Director()
test.programme = B()
test.build()
----------------------------
购买原料:砖瓦
设计方案:毛坯房
修建完工!设计建筑: 毛坯房 | 购买原料: 砖瓦
购买原料:玻璃
设计方案:写字楼
修建完工!设计建筑: 写字楼 | 购买原料: 玻璃
上面是一个很简单直白的例子,建造者模式应该有几个关键要素:相同的流程、不同的表示、修建者。也就是同一个对象(建筑)在同一修建者组织下,以相同的实例化流程(施工流程)来达到不同的表示效果(毛坯、写字楼)
这样的好处使得构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(一):工厂方法与抽象工厂及应用场景
工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。 示例code: 工厂模式 #-*-coding:utf-8-*-classA: def__init__(self): self.word="运行A" defrun(self): print(self.word)classB: def__init__(self): self.word="运行B" defrun(self): print(self.word)defInterface(classname): """ 工厂模式接口函数 :paramclassname: :return: """ run=dict(A=A,B=B) returnrun[classname]()if__name__=='__main__': test1=Interface('A') test1.run() test2=Interface('B') test2.run() 结果: 运行A 运行B 抽象工厂模式: #-*-coding:utf-8-*-classA: def__init_...
- 下一篇
python设计模式(三):原型模式—快速实例化类的一种途径
原型是相对于复制、克隆而言,但是不同于模板,模板创造出的东西是一模一样,而原型创造的东西是允许差异化和个性化存在,这就是原型。 原型模式最为核心的两点是:拷贝、属性更新;拷贝指深拷贝copy.deepcopy,属性更新是类的自有属性__dict__的更新。 实例代码: #-*-coding:utf-8-*-importcopyclassInformation: """个人信息""" def__init__(self): self.name=None self.ager=None self.height=None defrun(self): """ 自我介绍方法 :return: """ print("我叫{}:年龄:{}身高:{}".format(self.name,self.ager,self.height))classPrototype: def__init__(self,obj): self.copy_object=obj() defclone(self,**attr): obj=copy.deepcopy(self.copy_object) obj.__dict__.updat...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路