The before code shows elevators handling requests independently, which can cause inefficiency. The after code introduces an ElevatorCoordinator that assigns each floor request to the closest elevator, improving efficiency and reducing wait times.
### Before: Independent elevator handling requests
class Elevator:
def __init__(self, id):
self.id = id
self.current_floor = 0
self.requests = []
def add_request(self, floor):
self.requests.append(floor)
def move(self):
if self.requests:
next_floor = self.requests.pop(0)
self.current_floor = next_floor
# No coordination: multiple elevators may respond to same request
### After: Coordinated elevator system
class Elevator:
def __init__(self, id):
self.id = id
self.current_floor = 0
self.direction = None
self.requests = []
def assign_request(self, floor):
self.requests.append(floor)
def move(self):
if self.requests:
next_floor = self.requests.pop(0)
self.current_floor = next_floor
class ElevatorCoordinator:
def __init__(self, elevators):
self.elevators = elevators
def assign_request(self, floor):
best_elevator = None
min_distance = float('inf')
for elevator in self.elevators:
distance = abs(elevator.current_floor - floor)
if distance < min_distance:
min_distance = distance
best_elevator = elevator
if best_elevator:
best_elevator.assign_request(floor)
# Usage
elevators = [Elevator(1), Elevator(2)]
coordinator = ElevatorCoordinator(elevators)
coordinator.assign_request(5)
coordinator.assign_request(3)
for elevator in elevators:
elevator.move()