Python设计模式之建造者模式实例详解


Posted in Python onJanuary 17, 2019

本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下:

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

下面是一个建造者模式的demo

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——建造者模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以常见不同的表示
特性: 指挥者(Director) 指挥 建造者(Builder) 建造 Product
"""
import abc
class Builder(object):
  __metaclass__ = abc.ABCMeta
  @abc.abstractmethod
  def create_header(self):
    pass
  @abc.abstractmethod
  def create_body(self):
    pass
  @abc.abstractmethod
  def create_hand(self):
    pass
  @abc.abstractmethod
  def create_foot(self):
    pass
class Thin(Builder):
  def create_header(self):
    print '瘦子的头'
  def create_body(self):
    print '瘦子的身体'
  def create_hand(self):
    print '瘦子的手'
  def create_foot(self):
    print '瘦子的脚'
class Fat(Builder):
  def create_header(self):
    print '胖子的头'
  def create_body(self):
    print '胖子的身体'
  def create_hand(self):
    print '胖子的手'
  def create_foot(self):
    print '胖子的脚'
class Director(object):
  def __init__(self, person):
    self.person = person
  def create_preson(self):
    self.person.create_header()
    self.person.create_body()
    self.person.create_hand()
    self.person.create_foot()
if __name__=="__main__":
  thin = Thin()
  fat = Fat()
  director_thin = Director(thin)
  director_fat = Director(fat)
  director_thin.create_preson()
  director_fat.create_preson()

运行结果:

瘦子的头
瘦子的身体
瘦子的手
瘦子的脚
胖子的头
胖子的身体
胖子的手
胖子的脚

上面类的设计如下图:

Python设计模式之建造者模式实例详解

指挥者Director 调用建造者Builder的对象 具体的建造过程是在Builder的子类中实现的

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的异常处理学习笔记
Jan 28 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
Python实现的归并排序算法示例
Nov 21 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
Django自定义用户登录认证示例代码
Jun 30 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 #Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 #Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 #Python
pycharm 实现显示project 选项卡的方法
Jan 17 #Python
pycharm修改界面主题颜色的方法
Jan 17 #Python
PyCharm在新窗口打开项目的方法
Jan 17 #Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 #Python
You might like
PHP获取MAC地址的具体实例
2013/12/13 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
js 省地市级联选择
2010/02/07 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
javascript实现简易计算器
2017/02/01 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
Python Deque 模块使用详解
2014/07/04 Python
进一步了解Python中的XML 工具
2015/04/13 Python
python类中super() 的使用解析
2019/12/19 Python
windows支持哪个版本的python
2020/07/03 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
幼师自我鉴定
2014/02/01 职场文书
担保书格式及范文
2014/04/01 职场文书
小学生毕业评语
2014/12/26 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
党员理论学习心得体会
2016/01/21 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers