1. 建造者模式(Builder)介绍

UML类图

四个要素

  • 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。
  • 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
  • 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
  • 导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

2. 示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-'''Builder Pattern with Python Code
'''from abc import abstractmethod, ABCMeta# 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂
class Product(object):name = Nonemode = Nonedef showProduct(self):print("名称:" + self.name)print("型号:" + self.mode)def setName(self, name):self.name = namedef setMode(self, mode):self.mode = mode# 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现
class Builder(metaclass=ABCMeta):@abstractmethoddef setPart(self, arg1, arg2):pass@abstractmethoddef getProduct(self):pass# 建造者:实现抽象类的所有未实现的方法
class ConcreteBuilder(Builder):product = Product()def getProduct(self):return self.productdef setPart(self, arg1, arg2):self.product.setName(arg1)self.product.setMode(arg2)# 导演类:负责调用适当的建造者来组建产品
class Director(object):builder = ConcreteBuilder()def getAProduct(self):self.builder.setPart("宝马汽车", "X7")return self.builder.getProduct()def getBProduct(self):self.builder.setPart("奥迪汽车", "Q5")return self.builder.getProduct()class Client(object):def main(self):director = Director()product1 = director.getAProduct()product1.showProduct()product2 = director.getBProduct()product2.showProduct()if __name__ == "__main__":Client().main()

输出:

# ./Builder.py
名称:宝马汽车
型号:X7
名称:奥迪汽车
型号:Q5

参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/builder-pattern.html

python设计模式4-建造者模式相关推荐

  1. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

  2. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  3. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  4. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  5. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  6. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  7. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  8. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  9. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  10. 设计模式之建造者模式(01)

    2019独角兽企业重金招聘Python工程师标准>>> 建造者模式的定义: Separate the construction of a complex object from it ...

最新文章

  1. spring事件驱动模型--观察者模式在spring中的应用
  2. tensorflow学习之(三)Varible 变量的使用
  3. mysql 入门命令
  4. Less or Equal(CF-977C)
  5. python 如何修改字典的key值_Python编程:如何把元组/字典作为参数传递给函数(附代码)...
  6. 程序设计与算法----递归之放苹果问题
  7. 关于操作系统I/O的一些基础知识
  8. 华为交换机vlan创建命令
  9. 文明4 java_文明4主题曲《Baba Yetu》(敬请关注中文歌词部分~)
  10. 【预防流感】冬春之交推荐吃香菜
  11. 让Google搜索到GitHub上的个人博客
  12. 阿里巴巴产品实习生23天
  13. C++ 中 _T 含义及用途
  14. Java实现分割矩形
  15. 电子学:第011课——实验 10:晶体管开关
  16. 微信小程序实现分类列表
  17. Castor xsd生成java_利用Castor自动生成java文件
  18. 计算机配置好坏怎么看,怎么看电脑配置好坏
  19. Android NSD学习与使用
  20. 氧化锆气体传感器行业调研报告 - 市场现状分析与发展前景预测

热门文章

  1. python类中的函数调用关系_Python中类的内置方法与继承关系实例
  2. Linux:查看内存和CPU信息
  3. session对象的使用
  4. 2018-08-03北大青鸟S1结业 项目MyKTV的总结
  5. js基础--变量、数据类型、循环、判断、函数定义
  6. 点赞功能设计,网上的,留个底
  7. 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装
  8. Direct2D (37) : 使用不同画刷绘制文本
  9. MIT 算法导论 (二)Math Notation
  10. QTP中VBS脚本下FSO、WSH的应用(二)