📄 door.java
字号:
// Door.java// Sends DoorEvents to DoorListeners when opened or closedpackage com.Anance.elevator.model;// Java core packagesimport java.util.*;// Deitel packagesimport com.Anance.elevator.event.*;public class Door implements ElevatorMoveListener { // represent whether Door is open or closed private boolean open = false; // time before Door closes automatically public static final int AUTOMATIC_CLOSE_DELAY = 3000; // Set of DoorListeners private Set doorListeners; // location where Door opened or closed private Location doorLocation; // Door constructor instantiates Set for DoorListeners public Door() { doorListeners = new HashSet( 1 ); } // add Door listener public void addDoorListener( DoorListener listener ) { // prevent other objects from modifying doorListeners synchronized( doorListeners ) { doorListeners.add( listener ); } } // remove Door listener public void removeDoorListener( DoorListener listener ) { // prevent other objects from modifying doorListeners synchronized( doorListeners ) { doorListeners.remove( listener ); } } // open Door and send all listeners DoorEvent objects public void openDoor( Location location ) { if ( !open ) { open = true; // obtain iterator from Set Iterator iterator; synchronized( doorListeners ) { iterator = new HashSet( doorListeners ).iterator(); } // get next DoorListener while ( iterator.hasNext() ) { DoorListener doorListener = ( DoorListener ) iterator.next(); // send doorOpened event to this DoorListener doorListener.doorOpened( new DoorEvent( this, location ) ); } doorLocation = location; // declare Thread that ensures automatic Door closing Thread closeThread = new Thread( new Runnable() { public void run() { // close Door if open for more than 3 seconds try { Thread.sleep( AUTOMATIC_CLOSE_DELAY ); closeDoor( doorLocation ); } // handle exception if interrupted catch ( InterruptedException exception ) { exception.printStackTrace(); } } } // end anonymous inner class ); closeThread.start(); } } // end method openDoor // close Door and send all listeners DoorEvent objects public void closeDoor( Location location ) { if ( open ) { open = false; // obtain iterator from Set Iterator iterator; synchronized( doorListeners ) { iterator = new HashSet( doorListeners ).iterator(); } // get next DoorListener while ( iterator.hasNext() ) { DoorListener doorListener = ( DoorListener ) iterator.next(); // send doorClosed event to this DoorListener doorListener.doorClosed( new DoorEvent( this, location ) ); } } } // end method closeDoor // return whether Door is open or closed public boolean isDoorOpen() { return open; } // invoked after Elevator has departed public void elevatorDeparted( ElevatorMoveEvent moveEvent ) {} // invoked when Elevator has arrived public void elevatorArrived( ElevatorMoveEvent moveEvent ) { openDoor( moveEvent.getLocation() ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -