DuDecorator.py
- # 装饰模式 Decorator Pattern
- import six # https://pypi.org/project/six/
- from abc import ABCMeta
-
-
- @six.add_metaclass(ABCMeta)
- class Abstract_Coffee(object):
-
- def get_cost(self):
- pass
-
- def get_ingredients(self):
- pass
-
- def get_tax(self):
- return 0.1 * self.get_cost()
-
-
- class Concrete_Coffee(Abstract_Coffee):
-
- def get_cost(self):
- return 1.00
-
- def get_ingredients(self):
- return '咖啡'
-
-
- @six.add_metaclass(ABCMeta)
- class Abstract_Coffee_Decorator(Abstract_Coffee):
-
- def __init__(self, decorated_coffee):
- self.decorated_coffee = decorated_coffee
-
- def get_cost(self):
- return self.decorated_coffee.get_cost()
-
- def get_ingredients(self):
- return self.decorated_coffee.get_ingredients()
-
-
- class Sugar(Abstract_Coffee_Decorator):
-
- def __init__(self, decorated_coffee):
- Abstract_Coffee_Decorator.__init__(self, decorated_coffee)
-
- def get_cost(self):
- return self.decorated_coffee.get_cost()
-
- def get_ingredients(self):
- return self.decorated_coffee.get_ingredients() + ', 糖果'
-
-
- class Milk(Abstract_Coffee_Decorator):
-
- def __init__(self, decorated_coffee):
- Abstract_Coffee_Decorator.__init__(self, decorated_coffee)
-
- def get_cost(self):
- return self.decorated_coffee.get_cost() + 0.25
-
- def get_ingredients(self):
- return self.decorated_coffee.get_ingredients() + ', 牛奶'
-
-
- class Vanilla(Abstract_Coffee_Decorator):
-
- def __init__(self, decorated_coffee):
- Abstract_Coffee_Decorator.__init__(self, decorated_coffee)
-
- def get_cost(self):
- return self.decorated_coffee.get_cost() + 0.75
-
- def get_ingredients(self):
- return self.decorated_coffee.get_ingredients() + ', 香草'
main.py
调用:
- # 装饰模式 Decorator Pattern
- myCoffee = DuDecorator.Concrete_Coffee()
- print('Geovin Du买材料: '+myCoffee.get_ingredients()+
- '; geovindu付费用: '+str(myCoffee.get_cost())+'; 涂聚文交营业税 = '+str(myCoffee.get_tax()))
-
- myCoffee = DuDecorator.Milk(myCoffee)
- print('Geovin Du买材料: '+myCoffee.get_ingredients()+
- '; geovindu付费用: '+str(myCoffee.get_cost())+'; 涂聚文交营业税 = '+str(myCoffee.get_tax()))
-
- myCoffee = DuDecorator.Vanilla(myCoffee)
- print('Geovin Du买材料: '+myCoffee.get_ingredients()+
- '; geovindu付费用: '+str(myCoffee.get_cost())+'; 涂聚文交营业税 = '+str(myCoffee.get_tax()))
-
- myCoffee = DuDecorator.Sugar(myCoffee)
- print('Geovin Du买材料: '+myCoffee.get_ingredients()+
- '; geovindu付费用: '+str(myCoffee.get_cost())+'; 涂聚文交营业税 = '+str(myCoffee.get_tax()))
输出:
- Geovin Du买材料: 咖啡; geovindu付费用: 1.0; 涂聚文交营业税 = 0.1
- Geovin Du买材料: 咖啡, 牛奶; geovindu付费用: 1.25; 涂聚文交营业税 = 0.125
- Geovin Du买材料: 咖啡, 牛奶, 香草; geovindu付费用: 2.0; 涂聚文交营业税 = 0.2
- Geovin Du买材料: 咖啡, 牛奶, 香草, 糖果; geovindu付费用: 2.0; 涂聚文交营业税 = 0.2