import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* {@link <a href=
* "https://[Log in to view URL]"
* target= "_blank"></a>}
*
* @author itammb ( Italia Massimiliano Buscati )
* @version JDK 1.15
*
*/
class Main {
public static enum FLY_TYPE {
HELICOPTER, AIRPLANE, HOT_AIR_BALLON
}
public static enum ACTION_TYPE {
TAKEOFF, LANDING
}
interface Airplane {
void takeOff();
void landing();
void waiting();
}
public static class AirComponent implements Airplane {
private MediatorAirTrafficControlTower controlTower;
private FLY_TYPE flyType;
private String id;
public AirComponent(FLY_TYPE flyType, String id) {
this.flyType = flyType;
this.id = id;
}
public void setControlTower(MediatorAirTrafficControlTower controlTower) {
this.controlTower = controlTower;
}
@Override
public void takeOff() {
System.out.println(id + " -- " + flyType + " -- takeoff");
controlTower.notifyAirTrafficControl(this, ACTION_TYPE.TAKEOFF);
}
@Override
public void landing() {
System.out.println(id + " -- " + flyType + " -- landing");
controlTower.notifyAirTrafficControl(this, ACTION_TYPE.LANDING);
}
@Override
public void waiting() {
System.out.println(flyType + " -- waiting");
}
}
public interface MediatorAirTrafficControlTower {
public void notifyAirTrafficControl(AirComponent component, ACTION_TYPE event);
}
public static class MediatorConcreteAirportControlTower implements MediatorAirTrafficControlTower {
private List<AirComponent> airComponents;
public MediatorConcreteAirportControlTower(List<AirComponent> airComponents) {
this.airComponents = airComponents;
}
@Override
public void notifyAirTrafficControl(AirComponent sender, ACTION_TYPE event) {
if (event.equals(ACTION_TYPE.LANDING))
reactOnLanding(sender, event);
else if (event.equals(ACTION_TYPE.TAKEOFF))
reactOnTakeoff(sender, event);
}
private void reactOnLanding(AirComponent sender, ACTION_TYPE event) {
react(sender, event);
airComponents.remove(sender);
}
private void reactOnTakeoff(AirComponent sender, ACTION_TYPE event) {
react(sender, event);
airComponents.remove(sender);
}
private void react(AirComponent sender, ACTION_TYPE event) {
System.out.println("request -- ok");
for (AirComponent otherAction : airComponents)
if (!otherAction.equals(sender))
otherAction.waiting();
}
}
public static void main(String args[]) {
// Unit test - uso del design pattern: mediator
List<AirComponent> airComponents = new ArrayList<AirComponent>();
airComponents.add(new AirComponent(FLY_TYPE.HELICOPTER, "AIR XZ12"));
airComponents.add(new AirComponent(FLY_TYPE.AIRPLANE, "AIR YH2"));
airComponents.add(new AirComponent(FLY_TYPE.HOT_AIR_BALLON, "AIR KL1"));
MediatorConcreteAirportControlTower controlTower = new MediatorConcreteAirportControlTower(airComponents);
for (AirComponent airComponent : airComponents)
airComponent.setControlTower(controlTower);
while (!airComponents.isEmpty()) {
if ((new Random().nextBoolean()))
airComponents.get(0).landing();
else
airComponents.get(0).takeOff();
}
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: