Last active
April 15, 2023 18:39
-
-
Save esilvajr/ba0fa269267b7e931c57de3f75f9d2eb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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