电梯抽象工厂模式实现楼层按钮类和调度类
时间: 2023-12-29 15:53:45 浏览: 34
抽象工厂模式用于创建一组相关或者依赖对象。在电梯系统中,我们可以使用这种模式来创建楼层按钮和调度类。
首先,我们需要定义一个抽象工厂接口,它包含了创建楼层按钮和调度类的方法:
```java
public interface ElevatorFactory {
public FloorButton createFloorButton();
public Scheduler createScheduler();
}
```
接下来,我们可以创建两个具体的工厂类,分别用于创建普通电梯和高速电梯的楼层按钮和调度类:
```java
public class NormalElevatorFactory implements ElevatorFactory {
public FloorButton createFloorButton() {
return new NormalFloorButton();
}
public Scheduler createScheduler() {
return new NormalScheduler();
}
}
public class HighSpeedElevatorFactory implements ElevatorFactory {
public FloorButton createFloorButton() {
return new HighSpeedFloorButton();
}
public Scheduler createScheduler() {
return new HighSpeedScheduler();
}
}
```
在以上代码中,我们分别实现了 `ElevatorFactory` 接口中的两个方法,用于创建普通电梯和高速电梯的楼层按钮和调度类。
接着,我们需要定义楼层按钮和调度类的抽象类:
```java
public abstract class FloorButton {
protected int floorNumber;
public abstract void pressButton();
}
public abstract class Scheduler {
protected List<Integer> requestList;
public abstract void addRequest(int floorNumber);
public abstract int getNextFloor();
}
```
在以上代码中,我们分别定义了楼层按钮和调度类的抽象类,并定义了一些抽象方法。
接下来,我们可以实现具体的楼层按钮和调度类:
```java
public class NormalFloorButton extends FloorButton {
public NormalFloorButton(int floorNumber) {
this.floorNumber = floorNumber;
}
public void pressButton() {
// 通知调度类有新的请求
NormalScheduler.getInstance().addRequest(floorNumber);
}
}
public class HighSpeedFloorButton extends FloorButton {
public HighSpeedFloorButton(int floorNumber) {
this.floorNumber = floorNumber;
}
public void pressButton() {
// 通知调度类有新的请求
HighSpeedScheduler.getInstance().addRequest(floorNumber);
}
}
public class NormalScheduler extends Scheduler {
private static NormalScheduler instance = new NormalScheduler();
private NormalScheduler() {
requestList = new ArrayList<Integer>();
}
public static NormalScheduler getInstance() {
return instance;
}
public void addRequest(int floorNumber) {
// 将请求加入请求列表
requestList.add(floorNumber);
}
public int getNextFloor() {
// 根据电梯当前状态和请求列表,计算下一个要去的楼层
// ...
return nextFloor;
}
}
public class HighSpeedScheduler extends Scheduler {
private static HighSpeedScheduler instance = new HighSpeedScheduler();
private HighSpeedScheduler() {
requestList = new LinkedList<Integer>();
}
public static HighSpeedScheduler getInstance() {
return instance;
}
public void addRequest(int floorNumber) {
// 将请求加入请求列表
requestList.add(floorNumber);
}
public int getNextFloor() {
// 根据电梯当前状态和请求列表,计算下一个要去的楼层
// ...
return nextFloor;
}
}
```
在以上代码中,我们实现了具体的楼层按钮和调度类,它们分别对应普通电梯和高速电梯。同时,我们使用了单例模式来保证调度类的全局唯一性。
最后,我们可以使用抽象工厂模式来创建楼层按钮和调度类:
```java
ElevatorFactory factory = new NormalElevatorFactory();
FloorButton button = factory.createFloorButton();
Scheduler scheduler = factory.createScheduler();
```
在以上代码中,我们使用 `NormalElevatorFactory` 来创建楼层按钮和调度类。如果要创建高速电梯的楼层按钮和调度类,只需要使用 `HighSpeedElevatorFactory` 即可。