# -*- coding: utf-8 -*-
"""
建造者模式的Python实现
"""
from abc import ABCMeta, abstractmethod
#抽象建造者,此类规定具体建造者需要实现的方法
class AbcBuilder(object):
__metaclass__ = ABCMeta
def __init__(self):
#product是用户需要的产品
self.product = None
def newProduct(self):
self.product = Product()
@abstractmethod
def product_size(self):pass
@abstractmethod
def product_price(self):pass
#具体建造者,规定具体的实现细节
class ConcretBuilderA(AbcBuilder):
def product_size(self):
self.product.size = 'Big'
def product_price(self):
self.product.price = 50
class ConcretBuilderB(AbcBuilder):
def product_size(self):
self.product.size = 'Small'
def product_price(self):
self.product.price = 25
#Product的实例是用户需要的最终产品
class Product():
def __init__(self):
self.size = None
self.price = None
def __repr__(self):
return 'Size: %s, price: %s.' % (self.size, self.price)
#指挥者类集成了繁琐的建造步骤
class Director():
def __init__(self):
self.builder = None
def createProduct(self):
self.builder.newProduct()
self.builder.product_size()
self.builder.product_price()
def getProduct(self):
return self.builder.product
#Client
if __name__ == '__main__':
director = Director()
director.builder = ConcretBuilderA()
director.createProduct()
product = director.getProduct()
print(product)
director.builder = ConcretBuilderB()
director.createProduct()
product = director.getProduct()
print(product)
设计模式之建造者模式
最新推荐文章于 2024-04-28 18:00:14 发布