door.java
来自「用java模拟的电梯程序,可以选择有几层楼,一共有几个人在哪几层等电梯,可以不断」· Java 代码 · 共 141 行
JAVA
141 行
// 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 + =
减小字号Ctrl + -
显示快捷键?