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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
利用Python校准本地时间的方法教程
Oct 31 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
python文件读取失败怎么处理
Jun 23 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 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
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
php字符集转换
2017/01/23 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
Python进程通信之匿名管道实例讲解
2015/04/11 Python
Python字符串详细介绍
2015/05/09 Python
Python 数据结构之队列的实现
2017/01/22 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
sort命令的作用和用法
2012/11/04 面试题
大学生自我鉴定范文模板
2014/01/21 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
促销活动计划书
2014/05/02 职场文书
代领毕业证委托书
2014/08/02 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python