📄 elevatormodel.java
字号:
// ElevatorModel.java// Elevator simulation model with ElevatorShaft and two Floorspackage com.Anance.elevator.model;// Java core packagesimport java.util.*;// Deitel packagesimport com.Anance.elevator.event.*;import com.Anance.elevator.ElevatorConstants;public class ElevatorModel implements ElevatorModelListener, ElevatorConstants { // declare two-Floor architecture in simulation private Floor firstFloor; private Floor secondFloor; // ElevatorShaft in simulation private ElevatorShaft elevatorShaft; // objects listening for events from ElevatorModel private Set personMoveListeners; private DoorListener doorListener; private ButtonListener buttonListener; private LightListener lightListener; private BellListener bellListener; private ElevatorMoveListener elevatorMoveListener; // cumulative number of people in simulation private int numberOfPeople = 0; // constructor instantiates ElevatorShaft and Floors public ElevatorModel() { // instantiate firstFloor and secondFloor objects firstFloor = new Floor( FIRST_FLOOR_NAME ); secondFloor = new Floor( SECOND_FLOOR_NAME ); // instantiate ElevatorShaft object elevatorShaft = new ElevatorShaft( firstFloor, secondFloor ); // give elevatorShaft reference to first and second Floor firstFloor.setElevatorShaft( elevatorShaft ); secondFloor.setElevatorShaft( elevatorShaft ); // register for events from ElevatorShaft elevatorShaft.setDoorListener( this ); elevatorShaft.setButtonListener( this ); elevatorShaft.addElevatorMoveListener( this ); elevatorShaft.setLightListener( this ); elevatorShaft.setBellListener( this ); // instantiate Set for ElevatorMoveListener objects personMoveListeners = new HashSet( 1 ); } // end ElevatorModel constructor // return Floor with given name private Floor getFloor( String name ) { if ( name.equals( FIRST_FLOOR_NAME ) ) return firstFloor; else if ( name.equals( SECOND_FLOOR_NAME ) ) return secondFloor; else return null; } // end method getFloor // add Person to Elevator Simulator public void addPerson( String floorName ) { // instantiate new Person and place on Floor Person person = new Person( numberOfPeople, getFloor( floorName ) ); person.setName( Integer.toString( numberOfPeople ) ); // register listener for Person events person.setPersonMoveListener( this ); // start Person thread person.start(); // increment number of Person objects in simulation numberOfPeople++; } // end method addPerson // invoked when Elevator has departed from Floor public void elevatorDeparted( ElevatorMoveEvent moveEvent ) { elevatorMoveListener.elevatorDeparted( moveEvent ); } // invoked when Elevator has arrived at destination Floor public void elevatorArrived( ElevatorMoveEvent moveEvent ) { elevatorMoveListener.elevatorArrived( moveEvent ); } // send PersonMoveEvent to listener, depending on event type private void sendPersonMoveEvent( int eventType, PersonMoveEvent event ) { Iterator iterator = personMoveListeners.iterator(); while ( iterator.hasNext() ) { PersonMoveListener listener = ( PersonMoveListener ) iterator.next(); // send Event to this listener, depending on eventType switch ( eventType ) { // Person has been created case Person.PERSON_CREATED: listener.personCreated( event ); break; // Person arrived at Elevator case Person.PERSON_ARRIVED: listener.personArrived( event ); break; // Person entered Elevator case Person.PERSON_ENTERING_ELEVATOR: listener.personEntered( event ); break; // Person pressed Button object case Person.PERSON_PRESSING_BUTTON: listener.personPressedButton( event ); break; // Person exited Elevator case Person.PERSON_EXITING_ELEVATOR: listener.personDeparted( event ); break; // Person exited simulation case Person.PERSON_EXITED: listener.personExited( event ); break; default: break; } } } // end method sendPersonMoveEvent // invoked when Person has been created in model public void personCreated( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_CREATED, moveEvent ); } // invoked when Person has arrived at Floor's Button public void personArrived( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_ARRIVED, moveEvent ); } // invoked when Person has pressed Button public void personPressedButton( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_PRESSING_BUTTON, moveEvent ); } // invoked when Person has entered Elevator public void personEntered( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_ENTERING_ELEVATOR, moveEvent ); } // invoked when Person has departed from Elevator public void personDeparted( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_EXITING_ELEVATOR, moveEvent ); } // invoked when Person has exited Simulation public void personExited( PersonMoveEvent moveEvent ) { sendPersonMoveEvent( Person.PERSON_EXITED, moveEvent ); } // invoked when Door has opened public void doorOpened( DoorEvent doorEvent ) { doorListener.doorOpened( doorEvent ); } // invoked when Door has closed public void doorClosed( DoorEvent doorEvent ) { doorListener.doorClosed( doorEvent ); } // invoked when Button has been pressed public void buttonPressed( ButtonEvent buttonEvent ) { buttonListener.buttonPressed( buttonEvent ); } // invoked when Button has been reset public void buttonReset( ButtonEvent buttonEvent ) { buttonListener.buttonReset( buttonEvent ); } // invoked when Bell has rung public void bellRang( BellEvent bellEvent ) { bellListener.bellRang( bellEvent ); } // invoked when Light has turned on public void lightTurnedOn( LightEvent lightEvent ) { lightListener.lightTurnedOn( lightEvent ); } // invoked when Light has turned off public void lightTurnedOff( LightEvent lightEvent ) { lightListener.lightTurnedOff( lightEvent ); } // set listener for ElevatorModelListener public void setElevatorModelListener( ElevatorModelListener listener ) { // ElevatorModelListener extends all interfaces below addPersonMoveListener( listener ); setElevatorMoveListener( listener ); setDoorListener( listener ); setButtonListener( listener ); setLightListener( listener ); setBellListener( listener ); } // set listener for PersonMoveEvents public void addPersonMoveListener( PersonMoveListener listener ) { personMoveListeners.add( listener ); } // set listener for DoorEvents public void setDoorListener( DoorListener listener ) { doorListener = listener; } // set listener for ButtonEvents public void setButtonListener( ButtonListener listener ) { buttonListener = listener; } // add listener for ElevatorMoveEvents public void setElevatorMoveListener( ElevatorMoveListener listener ) { elevatorMoveListener = listener; } // set listener for LightEvents public void setLightListener( LightListener listener ) { lightListener = listener; } // set listener for BellEvents public void setBellListener( BellListener listener ) { bellListener = listener; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -