python设计模式之Builder模式
来源:互联网 发布:2015各省医药行业数据 编辑:程序博客网 时间:2024/05/17 00:52
Builder模式
Builder模式帮你把一个不同类的大工程分开成不同的部分,最后在把这些合并起来
python的例子
制造一辆车的工序是很繁琐和浩大的,我们可以定一个车辆的描述
class Vehicle(object): def __init__(self, type_name): self.type = type_name self.wheels = None self.doors = None self.seats = None # 不同的车子类型,齿轮,车门数,座位数都不尽相同 def view(self): print( "This vehicle is a " + self.type + " with; " + str(self.wheels) + " wheels, " + str(self.doors) + " doors, and " + str(self.seats) + " seats." )
这里我要把制造齿轮,车门,座位的工序抽象出来,用不同的制造部门去做
class VehicleBuilder(object): __metadata__ = abc.ABCMeta # 装饰器定义抽象方法(只能用在 metaclass 为 abc.ABCMeta 或其子类的 class 中) # 这里其实当然可以用pass,或者raise一个基类未实现的异常 @abc.abstractmethod def make_wheels(self): raise @abc.abstractmethod def make_doors(self): raise @abc.abstractmethod def make_seats(self): raise
然后设想我要制造汽车和自行车, 每个都要继承这个VehicleBuilder基类,但是齿轮,车门,座位都是不一样的
class CarBuilder(VehicleBuilder): def __init__(self): self.vehicle = Vehicle("Car ") def make_wheels(self): self.vehicle.wheels = 4 def make_doors(self): self.vehicle.doors = 3 def make_seats(self): self.vehicle.seats = 5class BikeBuilder(VehicleBuilder): def __init__(self): self.vehicle = Vehicle("Bike") def make_wheels(self): self.vehicle.wheels = 2 def make_doors(self): self.vehicle.doors = 0 def make_seats(self): self.vehicle.seats = 2
下面是最重要的环节:制造的Director
class VehicleManufacturer(object): def __init__(self): self.builder = None # 根据传进来的builder制造它提供的产品规格 def create(self): assert not self.builder is None, "No defined builder" self.builder.make_wheels() self.builder.make_doors() self.builder.make_seats() return self.builder.vehicle
看起来是不是有点和以前的模式不好分辨? 主要下面的调用方式
if __name__ == "__main__": manufacturer = VehicleManufacturer() # 重要的是这样的调用方式,每次修改builder方法传入不同的要求,然后在create里面去制造, # 整个过程都是在VehicleManufacturer完成 manufacturer.builder = CarBuilder() car = manufacturer.create() car.view() manufacturer.builder = BikeBuilder() bike = manufacturer.create() bike.view()
0 0
- python设计模式之Builder模式
- python设计模式之Builder模式
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之 builder
- iOS学习笔记连载文章一
- python设计模式之Borg模式
- 实现输出h264直播流的rtmp服务器 flash直播服务器
- php apc缓存以及与redis的对比
- iOS开发-关闭/收起键盘方法总结
- python设计模式之Builder模式
- 踏入职场的起点(连载二)
- 0x3f3f3f3f…编程中无穷大常量的设置技巧
- Android Toast工具类 解决Toast重复显示,Toast一直显示,在线程中可用
- 手机安全卫士------显示来电归属地的操作
- 2015年阿里巴巴校招客户端内推面试经历
- 【读书笔记】iOS-UIFont-如何知道字体的PostScript名称
- CodeForces 372A Counting Kangaroos is Fun 动物PK
- pylibmc客户端pool使用