【编程思想】【设计模式】【创建模式creational】建造者模式builder
Python版
https://github.com/faif/python-patterns/blob/master/creational/builder.py
#!/usr/bin/python
# -*- coding : utf-8 -*- """
*What is this pattern about?
It decouples the creation of a complex object and its representation,
so that the same process can be reused to build objects from the same
family.
>>他降低了创建复杂类的难度和重现他的难度,因此相同的流程在相同家族总可以被重用
This is useful when you must separate the specification of an object
from its actual representation (generally for abstraction).
>>当你必须把它特殊的部分从他实际的表现中分离出来的时候很有用,通常用来做抽象 *What does this example do? The first example achieves this by using an abstract base
class for a building, where the initializer (__init__ method) specifies the
steps needed, and the concrete subclasses implement these steps.
>>第一个例子达到了这个目的,他使用一个抽象的积累构建了一个building,
>>初始化方法(__init__)指定了需要的方法,这个实际的子类实现了这些步骤 In other programming languages, a more complex arrangement is sometimes
necessary. In particular, you cannot have polymorphic behaviour in a
constructor in C++ - see https://stackoverflow.com/questions/1453131/how-can-i-get-polymorphic-behavior-in-a-c-constructor
>>在其他的开发语言中,往往需要更加复杂的设计。就像在C++中不能使用多态一样
- which means this Python technique will not work. The polymorphism
required has to be provided by an external, already constructed
instance of a different class.
>>这就意味着python技术不好使了。多态需要外部的,已经构成的,不同的类型的实例来支持 In general, in Python this won't be necessary, but a second example showing
this kind of arrangement is also included.
>>总的来说,在python中,这个不是必须的,但是第二个例子表明这种设计也是可以的 *Where is the pattern used practically? *References:
https://sourcemaking.com/design_patterns/builder *TL;DR80
Decouples the creation of a complex object and its representation.
""" # Abstract Building
class Building(object): def __init__(self):
self.build_floor()
self.build_size() def build_floor(self):
raise NotImplementedError def build_size(self):
raise NotImplementedError def __repr__(self):
return 'Floor: {0.floor} | Size: {0.size}'.format(self) # Concrete Buildings
class House(Building): def build_floor(self):
self.floor = 'One' def build_size(self):
self.size = 'Big' class Flat(Building): def build_floor(self):
self.floor = 'More than One' def build_size(self):
self.size = 'Small' # In some very complex cases, it might be desirable to pull out the building
# logic into another function (or a method on another class), rather than being
# in the base class '__init__'. (This leaves you in the strange situation where
# a concrete class does not have a useful constructor) class ComplexBuilding(object):
def __repr__(self):
return 'Floor: {0.floor} | Size: {0.size}'.format(self) class ComplexHouse(ComplexBuilding):
def build_floor(self):
self.floor = 'One' def build_size(self):
self.size = 'Big and fancy' def construct_building(cls):
building = cls()
building.build_floor()
building.build_size()
return building # Client
if __name__ == "__main__":
house = House()
print(house)
flat = Flat()
print(flat) # Using an external constructor function:
complex_house = construct_building(ComplexHouse)
print(complex_house) ### OUTPUT ###
# Floor: One | Size: Big
# Floor: More than One | Size: Small
# Floor: One | Size: Big and fancy
Python转载版
【编程思想】【设计模式】【创建模式creational】建造者模式builder的更多相关文章
- 设计模式的征途—6.建造者(Builder)模式
建造者模式又称为生成器模式,它是一种较为复杂.使用频率也相对较低的创建型模式.建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品.因为,没有人买车会只买一个方向盘或者轮胎,大 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- Java设计模式(3)建造者模式(Builder模式)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...
- 【设计模式】 模式PK:工厂模式VS建造者模式
1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方 ...
- 【设计模式】 模式PK:抽象工厂模式VS建造者模式
1.概述 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可.而建造者模式则是要求按 ...
- 设计模式(六)——建造者模式(源码StringBuilder分析)
建造者模式 1 盖房项目需求 1) 需要建房子:这一过程为打桩.砌墙.封顶 2) 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的. 3) 请编写程序,完成需求. ...
- java设计模式(五)--建造者模式(Builder)
转载:http://zz563143188.iteye.com/blog/1847029 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象 ...
- 【设计模式 - 3】之建造者模式(Builder)
1 模式简介 建造者模式也叫生成器模式,和抽象工厂模式相似,也是一种构建复杂对象的模式. 建造者模式中的角色分类: 抽象建造者Builder:接口类型,用于规范各个产品的组成部分: 具体建造 ...
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...
- Java设计模式(5)——创建型模式之建造者模式(Builder)
一.概述 概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.(与工厂类不同的是它用于创建复合对象) UML图 主要角色 抽象建造者(Builder)——规范建造方法与结果 ...
随机推荐
- 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权
问题 打开虚拟机镜像时报 VMware该虚拟机似乎正在使用中.如果该虚拟机未在使用,请按"获取所有权(T)"按钮获取它的所有权 解决方法 在你安装的镜像文件目录下找到后缀为.vmx ...
- NodeJs创建一个简单的服务器
步骤: 1 //模块化引入 2 let http = require ("http"); 3 4 //创建服务器 5 http.createServer(function(requ ...
- 2020 天翼杯 部分wp
天翼杯 呜呜呜呜 是我太菜了 Web APItest 源码 const express = require("express"); const cors = require(&qu ...
- 常见的yaml写法-CronJob
CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行.这个实际上和我们Linux中的crontab就非常类似了.一个CronJob ...
- Linux系统僵尸进程详解
大安好,我是良许. 本文我们将来讨论一下什么是僵尸进程,僵尸进程是怎么产生的,如何杀死一个僵尸进程. Linux中的进程是什么? 讲到进程,我们要先了解一下另一个概念:程序. 程序说白了就是躺在电脑硬 ...
- 如何用命令行编译c++程序
作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,而不知道如何直接通过编译器编译程序的话.虽然说也没啥大不了的,但是如果掌握了手动编译的技能,那肯定会是一种炫技般的存在.从客观的角度来讲,一方面, ...
- 面向政务企业的开发者工具集-逐浪文本大师v0.1正式发布(含代码全部开源啦!)
这是一款基于.net 4.7环境开发的开发者工具. 一个实用的windows小工具集合,里面包含了多个常用的小软件.其中的批量修改文件名及文件内容功能,可以自定义修改规则,支持规则的导入与导出.不需要 ...
- Linux——搭建Samba(CIFS)服务器
一.Samba的基本概念 Samba服务:是提供基于Linux和Windows的共享文件服务,服务端和客户端都可以是Linux或Windows操作系统.可以基于特定的用户访问,功能比NFS更强大. S ...
- Hadoop整体概述
目录 前言 core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml 一.HDFS HDFS的设计理念 HDFS的缺点 1.NameNode ...
- BootStrap中模态框踩坑
在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...