使用多个简单的对象构造一个复杂的对象
使用场景
- 肯德基套餐场景
Demo
"""建造者模式"""from functools import reduceclass Item:def name(self):raise NotImplementedErrordef packing(self):raise NotImplementedErrordef price(self):raise NotImplementedErrorclass Packing:def pack(self):raise NotImplementedErrorclass 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.2class ChickenBurger(Burger):def name(self):return "chickenburger"def price(self):return 35.1class ColdDrink(Item):def packing(self):return Bottle()class Pepsi(ColdDrink):def name(self):return self.__class__def price(self):return 10.2class Coke(ColdDrink):def name(self):return self.__class__def price(self):return 15.3class 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 mealdef prepare_b_meal(self):meal = Meal()meal.add(Pepsi())meal.add(VegBurger())return mealif __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())
