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探索之pLSA实现代码
Oct 25 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Python异常处理操作实例详解
May 10 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python实现同一局域网下传输图片
Mar 20 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
通过cmd进入python的步骤
Jun 16 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 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制作新闻系统的思路
2006/10/09 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python2.7的编码问题与解决方法
2016/10/04 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
详解django中Template语言
2020/02/22 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
python中实现栈的三种方法
2020/12/19 Python
Android面试题及答案
2015/09/04 面试题
综合实践活动方案
2014/02/14 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
护士自荐信怎么写
2015/03/06 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python