📄 elevatorsimulation.java
字号:
// ElevatorSimulation.java
// Elevator simulation model with ElevatorShaft and two Floors
package com.deitel.jhtp5.elevator.model;
// Java core packages
import java.util.*;
// Deitel packages
import com.deitel.jhtp5.elevator.event.*;
import com.deitel.jhtp5.elevator.ElevatorConstants;
public class ElevatorSimulation implements ElevatorSimulationListener,
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 ElevatorSimulation()
{
// 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 setElevatorSimulationListener(
ElevatorSimulationListener 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 + -