Skip to content

Instantly share code, notes, and snippets.

@esilvajr
Created May 11, 2024 18:57
Show Gist options
  • Save esilvajr/f36ad162cb8a0ac9e32491d1fbc8ce02 to your computer and use it in GitHub Desktop.
Save esilvajr/f36ad162cb8a0ac9e32491d1fbc8ce02 to your computer and use it in GitHub Desktop.
elevator.py
class Observer():
def perform_service(self):
raise NotImplementedError
def check_state(self, subject: Subject):
raise NotImplementedError
class EntertainmentServiceObserver(Observer):
__state: State = None
def check_state(self, subject: Subject):
self.__state = subject.get_state()
def perform_service(self):
if isistance(self.__state, GoingUpState) or isistance(self.__state, GoingDownState):
print("Tocar uma música")
class EmergencyServiceObserver(Observer):
__state: State = None
def check_state(self, subject: Subject):
self.__state = subject.get_state()
def perform_service(self):
if isistance(self.__state, StuckedState):
print("Chamar os bombeiros")
print("Evacuar o prédio")
print("Desabilitar os outros elevadores")
class MaintenceServiceObserver(Observer):
__state: State = None
def check_state(self, subject: Subject):
self.__state = subject.get_state()
def perform_service(self):
if isistance(self.__state, MaintenceState):
print("Chamar o sindico | Ligar Atlas")
class Subject():
__observers: List[Observer] = []
__state: State = None
def attach(self, observer: Observer) -> None:
self.__observers.append(observer)
def detach(self, observer: Observer) -> None:
self.__observers.remove(observer)
def notify(self) -> None:
for observer in self.__observers:
observer.perform_service()
observer.check_state(self)
def get_state(self) -> State:
return self.__state
class IElevator():
pass
class Elevator(Subject, IElevator):
def set_state(self, state: State):
self.__state = state
self.notify()
class SocialElevator(Evelator):
def tv(self):
pass
class ServiceElevator(Evelator):
def radio(self):
pass
class ElevatorFactory():
def create_elevator(self) -> IElevator:
raise NotImplementedError
class SocialElevatorFactory():
def create_elevator(self) -> IElevator:
return SocialElevator()
class ServiceElevatorFactory():
def create_elevator(self) -> IElevator:
return ServiceElevator()
#Interface State
class State():
def press_button(self, elevator: Elevator):
raise NotImplementedError
def deactive(self, evevator: Elevator):
raise NotImplementedError
#Interface ExceptionalState
class ExceptionalState(State):
pass
#Concrete
class GoingUpState(State):
__instance: GoingUpState = None
@classmethod
def get_instance(cls):
if cls.__instance is None:
cls.__instance = cls()
return cls.__instance
def press_button(self, elevator: Elevator):
elevator.setState(self)
def deactive(self, elevator: Elevator):
elevator.setState(Maintence.get_instance())
class GoingDownState(State):
__instance: GoingDownState = None
@classmethod
def get_instance(cls):
if cls.__instance is None:
cls.__instance = cls()
return cls.__instance
def press_button(self, elevator: Elevator):
elevator.setState(self)
def deactive(self, elevator: Elevator):
elevator.setState(Maintence.get_instance())
class StopedState(State):
__instance: StopedState = None
@classmethod
def get_instance(cls):
if cls.__instance is None:
cls.__instance = cls()
return cls.__instance
def press_button(self, elevator: Elevator):
elevator.setState(self)
def deactive(self, elevator: Elevator):
elevator.setState(Maintence.get_instance())
class StuckedState(ExceptionalState):
__instance: StuckedState = None
@classmethod
def get_instance(cls):
if cls.__instance is None:
cls.__instance = cls()
return cls.__instance
def press_button(self, elevator: Elevator):
elevator.setState(self)
def deactive(self, elevator: Elevator):
elevator.setState(Maintence.get_instance())
class MaintenceState(ExceptionalState):
__instance: MaintenceState = None
@classmethod
def get_instance(cls):
if cls.__instance is None:
cls.__instance = cls()
return cls.__instance
def press_button(self, elevator: Elevator):
elevator.setState(self)
def deactive(self, elevator: Elevator):
elevator.setState(Maintence.get_instance())
if __name__ == "__main__":
social_e = SocialElevatorFactory().create_elevator()
service_e = ServiceElevatorFactory().create_elevator()
social_e.set_state(StopedState())
service_e.set_state(StopedState())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment