使用多个简单的对象构造一个复杂的对象
使用场景
- 肯德基套餐场景
Demo
"""
建造者模式
"""
from functools import reduce
class Item:
def name(self):
raise NotImplementedError
def packing(self):
raise NotImplementedError
def price(self):
raise NotImplementedError
class Packing:
def pack(self):
raise NotImplementedError
class Wrapper(Packing):
def pack(self):
return 'wrapper'
class Bottle(Packing):
def pack(self):
return 'bottle'
class Burger(Item):
def packing(self):
return Wrapper()
class VegBurger(Burger):
def name(self):
return 'vegburger'
def price(self):
return 33.2
class ChickenBurger(Burger):
def name(self):
return "chickenburger"
def price(self):
return 35.1
class ColdDrink(Item):
def packing(self):
return Bottle()
class Pepsi(ColdDrink):
def name(self):
return self.__class__
def price(self):
return 10.2
class Coke(ColdDrink):
def name(self):
return self.__class__
def price(self):
return 15.3
class Meal:
def __init__(self):
self.items = []
def add(self, item):
self.items.append(item)
def prices(self):
return reduce(lambda x, y: x.price() + y.price(), self.items)
class MealBuilder:
def prepare_a_meal(self):
meal = Meal()
meal.add(ChickenBurger())
meal.add(Coke())
return meal
def prepare_b_meal(self):
meal = Meal()
meal.add(Pepsi())
meal.add(VegBurger())
return meal
if __name__ == '__main__':
m_b = MealBuilder()
a_meal = m_b.prepare_a_meal()
print("a套餐的价格是:", a_meal.prices())
b_meal = m_b.prepare_b_meal()
print("b套餐的价格是:", b_meal.prices())