40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from abc import ABC, abstractmethod
|
|
|
|
class IBeverage(ABC):
|
|
@abstractmethod
|
|
def getDescriprion(self) -> str: pass
|
|
@abstractmethod
|
|
def getCost(self) -> int: pass
|
|
|
|
class Coffe(IBeverage):
|
|
def getDescriprion(self) -> str: return "Coffee"
|
|
def getCost(self) -> int: return 100
|
|
|
|
class Tea(IBeverage):
|
|
def getDescriprion(self) -> str: return "Tea"
|
|
def getCost(self) -> int: return 100
|
|
|
|
class MilkShake(IBeverage):
|
|
def getDescriprion(self) -> str: return "Milk Shake"
|
|
def getCost(self) -> int: return 250
|
|
|
|
class ToppingDecorator(IBeverage):
|
|
def __init__(self, beverage: IBeverage): self._beverage = beverage
|
|
def getDescriprion(self) -> str: return f"{self._beverage.getDescriprion()}, {self.getToppingDescription()}"
|
|
def getCost(self) -> int: return self._beverage.getCost() + self.getToppingCost()
|
|
@abstractmethod
|
|
def getToppingDescription(self) -> str: pass
|
|
@abstractmethod
|
|
def getToppingCost(self) -> int: pass
|
|
|
|
class Cinnamon(ToppingDecorator):
|
|
def getToppingDescription(self) -> str: return "Cinnamon"
|
|
def getToppingCost(self) -> int: return 30
|
|
|
|
class Ice(ToppingDecorator):
|
|
def getToppingDescription(self) -> str: return "Ice"
|
|
def getToppingCost(self) -> int: return 15
|
|
|
|
coffee, tea, milkshake = Coffe(), Tea(), MilkShake()
|
|
beverages = [Ice(Cinnamon(coffee)), Cinnamon(tea), Cinnamon(milkshake)]
|
|
for beverage in beverages: print(f"{beverage.getDescriprion()} - Cost: {beverage.getCost()}") |