装饰器模式python实现
class Beverage(metaclass=abc.ABCMeta):
def __init__(self):
self.description = 'Unknown Beverage'
def getDescription(self):
return self.description
@abc.abstractmethod
def cost(self):
pass
class CondimentDetorator(Beverage):
@abc.abstractmethod
def getDescription(self):
pass
class Espresso(Beverage):
def __init__(self):
self.description = 'Espresso'
def cost(self):
return 1.99
class Houseblend(Beverage):
def __init__(self):
self.description = 'Houseblend'
def cost(self):
return 0.89
class Mocha(CondimentDetorator):
def __init__(self, beverage):
self.beverage = beverage
def getDescription(self):
return self.beverage.getDescription() + ",Mocha"
def cost(self):
return 0.20 + self.beverage.cost()
if __name__ == '__main__':
beverage = Espresso()
print(beverage.getDescription())
print(beverage.cost())
beverage2 = Espresso()
beverage2 = Mocha(beverage2)
print(beverage2.getDescription())
print(beverage2.cost())