Паттер "Декоратор" на языке python. Mocha это молочная пена,а не моча :)))))
from abc import ABCMeta,abstractmethod,abstractproperty
class Beverge:
def __init__(self):
self.description = 'Unknown'
def getDescription(self):
return self.description
@abstractmethod
def cost(self):
pass
class CondimentDecorator(Beverge):
@abstractmethod
def getDescription(self):
pass
class Expresso(Beverge):
def __init__(self):
self.description='Expresso'
def cost(self):
return 1.99
class HouseBlend(Beverge):
def __init__(self):
self.description='HouseBlend'
def cost(self):
return 2.99
class Mocha(CondimentDecorator):
def __init__(self,beverge):
self.beverge = beverge
def getDescription(self):
return self.beverge.getDescription() + ", Mocha"
def cost(self):
return self.beverge.cost() + 0.20
class Soy(CondimentDecorator):
def __init__(self,beverge):
self.beverge = beverge
def getDescription(self):
return self.beverge.getDescription() + ", Soy"
def cost(self):
return self.beverge.cost() + 0.87
if __name__ == "__main__":
b = Mocha(Soy(Mocha(Expresso())))
print b.getDescription() + " $ " + str(b.cost())
Выходные данные:
Expresso, Mocha, Soy, Mocha $ 3.26
Expresso, Mocha, Soy, Mocha $ 3.26