📄 elevatorshaft.java
字号:
// ElevatorShaft.java// Represents elevator shaft, which contains elevatorpackage com.Anance.elevator.model;// Java core packagesimport java.util.*;// Deitel packagesimport com.Anance.elevator.event.*;public class ElevatorShaft implements ElevatorMoveListener, LightListener, BellListener { // Elevator private Elevator elevator; // Buttons on Floors private Button firstFloorButton; private Button secondFloorButton; // Doors on Floors private Door firstFloorDoor; private Door secondFloorDoor; // Lights on Floors private Light firstFloorLight; private Light secondFloorLight; // listeners private DoorListener doorListener; private ButtonListener buttonListener; private LightListener lightListener; private BellListener bellListener; private Set elevatorMoveListeners; // constructor initializes aggregated components public ElevatorShaft( Floor firstFloor, Floor secondFloor ) { // instantiate Set for ElevatorMoveListeners elevatorMoveListeners = new HashSet( 1 ); // anonymous inner class listens for ButtonEvents ButtonListener floorButtonListener = new ButtonListener() { // called when Floor Button has been pressed public void buttonPressed( ButtonEvent buttonEvent ) { // request elevator move to location Location location = buttonEvent.getLocation(); buttonListener.buttonPressed( buttonEvent ); elevator.requestElevator( location ); } // called when Floor Button has been reset public void buttonReset( ButtonEvent buttonEvent ) { buttonListener.buttonReset( buttonEvent ); } }; // end anonymous inner class // instantiate Floor Buttons firstFloorButton = new Button(); secondFloorButton = new Button(); // register anonymous ButtonListener with Floor Buttons firstFloorButton.setButtonListener( floorButtonListener ); secondFloorButton.setButtonListener( floorButtonListener ); // Floor Buttons listen for ElevatorMoveEvents addElevatorMoveListener( firstFloorButton ); addElevatorMoveListener( secondFloorButton ); // anonymous inner class listens for DoorEvents DoorListener floorDoorListener = new DoorListener() { // called when Floor Door has opened public void doorOpened( DoorEvent doorEvent ) { // forward event to doorListener doorListener.doorOpened( doorEvent ); } // called when Floor Door has closed public void doorClosed( DoorEvent doorEvent ) { // forward event to doorListener doorListener.doorClosed( doorEvent ); } }; // end anonymous inner class // instantiate Floor Doors firstFloorDoor = new Door(); secondFloorDoor = new Door(); // register anonymous DoorListener with Floor Doors firstFloorDoor.addDoorListener( floorDoorListener ); secondFloorDoor.addDoorListener( floorDoorListener ); // instantiate Lights, then listen for LightEvents firstFloorLight = new Light(); addElevatorMoveListener( firstFloorLight ); firstFloorLight.setLightListener( this ); secondFloorLight = new Light(); addElevatorMoveListener( secondFloorLight ); secondFloorLight.setLightListener( this ); // instantiate Elevator object elevator = new Elevator( firstFloor, secondFloor ); // register for ElevatorMoveEvents from elevator elevator.addElevatorMoveListener( this ); // listen for BellEvents from elevator elevator.setBellListener( this ); // anonymous inner class listens for ButtonEvents from // elevator elevator.setButtonListener( new ButtonListener() { // invoked when button has been pressed public void buttonPressed( ButtonEvent buttonEvent ) { // send event to listener buttonListener.buttonPressed( buttonEvent ); } // invoked when button has been reset public void buttonReset( ButtonEvent buttonEvent ) { // send event to listener buttonListener.buttonReset( new ButtonEvent( this, elevator ) ); } } // end anonymous inner class ); // anonymous inner class listens for DoorEvents from // elevator elevator.setDoorListener( new DoorListener() { // invoked when door has opened public void doorOpened( DoorEvent doorEvent ) { // send event to listener doorListener.doorOpened( doorEvent ); } // invoked when door has closed public void doorClosed( DoorEvent doorEvent ) { // send event to listener doorListener.doorClosed( doorEvent ); } } // end anonymous inner class ); // start Elevator Thread elevator.start(); } // end ElevatorShaft constructor // get Elevator public Elevator getElevator() { return elevator; } // get Door on first Floor public Door getFirstFloorDoor() { return firstFloorDoor; } // get Door on second Floor public Door getSecondFloorDoor() { return secondFloorDoor; } // get Button on first Floor public Button getFirstFloorButton() { return firstFloorButton; } // get Button on second Floor public Button getSecondFloorButton() { return secondFloorButton; } // get Light on first Floor public Light getFirstFloorLight() { return firstFloorLight; } // get Light on second Floor public Light getSecondFloorLight() { return secondFloorLight; } // invoked when Bell rings public void bellRang( BellEvent bellEvent ) { bellListener.bellRang( bellEvent ); } // invoked when Light turns on public void lightTurnedOn( LightEvent lightEvent ) { lightListener.lightTurnedOn( lightEvent ); } // invoked when Light turns off public void lightTurnedOff( LightEvent lightEvent ) { lightListener.lightTurnedOff( lightEvent ); } // invoked when Elevator departs public void elevatorDeparted( ElevatorMoveEvent moveEvent ) { Iterator iterator = elevatorMoveListeners.iterator(); // iterate Set of ElevatorMoveEvent listeners while ( iterator.hasNext() ) { // get respective ElevatorMoveListener from Set ElevatorMoveListener listener = ( ElevatorMoveListener ) iterator.next(); // send ElevatorMoveEvent to this listener listener.elevatorDeparted( moveEvent ); } } // end method elevatorDeparted // invoked when Elevator arrives public void elevatorArrived( ElevatorMoveEvent moveEvent ) { // obtain iterator from Set Iterator iterator = elevatorMoveListeners.iterator(); // get next DoorListener while ( iterator.hasNext() ) { // get next ElevatorMoveListener from Set ElevatorMoveListener listener = ( ElevatorMoveListener ) iterator.next(); // send ElevatorMoveEvent to this listener listener.elevatorArrived( moveEvent ); } // end while loop } // end method elevatorArrived // set listener to DoorEvents public void setDoorListener( DoorListener listener ) { doorListener = listener; } // set listener to ButtonEvents public void setButtonListener( ButtonListener listener ) { buttonListener = listener; } // add listener to ElevatorMoveEvents public void addElevatorMoveListener( ElevatorMoveListener listener ) { elevatorMoveListeners.add( listener ); } // set listener to LightEvents public void setLightListener( LightListener listener ) { lightListener = listener; } // set listener to BellEvents public void setBellListener( BellListener listener ) { bellListener = listener; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -