设计模式之建造者模式

# -*- 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)             


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值