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 相关文章推荐
21行Python代码实现拼写检查器
Jan 25 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python读写/追加excel文件Demo分享
May 03 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
python装饰器常见使用方法分析
Jun 26 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
pandas取dataframe特定行列的实现方法
May 24 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
玩转图像函数库―常见图形操作
2006/09/03 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
初学JavaScript第二章
2008/09/30 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
提升Python程序性能的7个习惯
2019/04/14 Python
使用Python发现隐藏的wifi
2020/03/04 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
企业治理工作自我评价
2013/09/26 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
党委班子对照检查材料
2014/08/19 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
努力学习保证书
2015/02/26 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python