Skip to content

Instantly share code, notes, and snippets.

@esilvajr
Last active April 15, 2023 18:39
Show Gist options
  • Save esilvajr/ba0fa269267b7e931c57de3f75f9d2eb to your computer and use it in GitHub Desktop.
Save esilvajr/ba0fa269267b7e931c57de3f75f9d2eb to your computer and use it in GitHub Desktop.
class OrderState():
def processOrder(self, order):
raise NotImplementedError
class PaymentState():
_payment = None;
def verifyPayment(self) -> None:
raise NotImplementedError
class WaitingPaymentState(OrderState):
def processOrder(self, order) -> OrderState:
print("Aguardando pagamento")
if isinstance(order.getPaymentState(), ConfirmedPaymentState):
return PaidState()
return self
class DoneState(OrderState):
def processOrder(self, order) -> OrderState:
print("Pedido finalizado")
class PaidState(OrderState):
def processOrder(self, order) -> OrderState:
print("Pagamento recebido")
return DoneState()
class InitState(OrderState):
def processOrder(self, order) -> OrderState:
print("Pedido realizado")
if isinstance(order.getPaymentState(), ConfirmedPaymentState):
return PaidState()
return WaitingPaymentState()
class UnconfirmedPaymentState(PaymentState):
def verifyPayment(self) -> PaymentState:
if (self._payment != True):
return self
class ConfirmedPaymentState(PaymentState):
def verifyPayment(self) -> PaymentState:
if (self._payment):
return self
return UnconfirmedPaymentState()
class Order():
__state: OrderState = None
__payment: PaymentState = None
def setOrderState(self, state: OrderState) -> None:
self.__state = state
def getOrderState(self) -> OrderState:
return self.__state
def setPaymentState(self, state: PaymentState) -> None:
self.__payment = state
def getPaymentState(self) -> PaymentState:
return self.__payment
def processOrder(self) -> None:
self.__state = self.__state.processOrder(self)
if __name__ == "__main__":
order: Order = Order()
order.setPaymentState(UnconfirmedPaymentState())
order.setOrderState(InitState())
order.processOrder()
print(order.getOrderState()) #WaitingPaymentState
order.setPaymentState(ConfirmedPaymentState())
order.processOrder()
print(order.getOrderState()) #PaidState
order.processOrder()
print(order.getOrderState()) #DoneState
order.processOrder()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment