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通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
Python实现基本线性数据结构
Aug 22 Python
VSCode下好用的Python插件及配置
Apr 06 Python
Python格式化输出%s和%d
May 07 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
Python3分析处理声音数据的例子
Aug 27 Python
Python FFT合成波形的实例
Dec 04 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
Python socket处理client连接过程解析
Mar 18 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
Django cookie和session的应用场景及如何使用
Apr 29 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添加MySQL数据记录代码
2008/06/07 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
UI Events 用户界面事件
2012/06/27 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
python实现简单ftp客户端的方法
2015/06/28 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python 网络编程常用代码段
2016/08/28 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
最新大学生自我评价
2013/09/24 职场文书
党员学习十八大感想
2014/01/17 职场文书
励志演讲稿大全
2014/08/21 职场文书
个人工作表现自我评价
2015/03/06 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
Java线程的6种状态与生命周期
2022/05/11 Java/Android