Created
May 11, 2024 18:57
-
-
Save esilvajr/f36ad162cb8a0ac9e32491d1fbc8ce02 to your computer and use it in GitHub Desktop.
elevator.py
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 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