Skip to content

Instantly share code, notes, and snippets.

@jnovikov
Created February 17, 2018 11:46
Show Gist options
  • Save jnovikov/dd60e5cbbeb7f93042b17d10818713f0 to your computer and use it in GitHub Desktop.
Save jnovikov/dd60e5cbbeb7f93042b17d10818713f0 to your computer and use it in GitHub Desktop.
State pattern
class AbstractState(object):
def set_machine(self, machine):
raise NotImplementedError
def get_coffee(self):
raise NotImplementedError
class CappuccinoState(AbstractState):
def set_machine(self, machine):
self.machine = machine
def get_coffee(self):
self.machine.coffee -= 30
self.machine.milk -= 200
self.machine.water -= 50
return "Cappuccino"
class EspressoState(AbstractState):
def set_machine(self, machine):
self.machine = machine
def get_coffee(self):
self.machine.coffee -= 50
self.machine.water -= 50
return "Espresso"
class CoffeeMachine(object):
def __init__(self, coffee, milk, water):
self.coffee = coffee
self.milk = milk
self.water = water
self.state = None
def get_coffee(self, variant):
if variant == "Cappuccino":
cappuccino_state = CappuccinoState()
cappuccino_state.set_machine(self)
self.state = cappuccino_state
elif variant == "Espresso":
espresso_state = EspressoState()
espresso_state.set_machine(self)
self.state = espresso_state
return self.state.get_coffee()
def print_info(self):
print("Coffee: ", self.coffee)
print("Water: ", self.water)
print("Milk: ", self.milk)
machine = CoffeeMachine(500, 500, 500)
print(machine.get_coffee("Espresso"))
machine.print_info()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment