行为型模式 - 中介者模式 (Mediator Pattern)

中介者模式的核心思想是将对象之间的复杂交互封装到一个中介者对象中,从而降低对象之间的耦合度。


import java.util.ArrayList;
import java.util.List;

// 抽象中介者类
abstract class TowerMediator {
    public abstract void registerPlane(Airplane plane);
    public abstract void requestLanding(Airplane plane);
    public abstract void confirmLanding(Airplane plane);
}

// 具体中介者类:机场塔台
class AirportTower extends TowerMediator {
    private List<Airplane> planes = new ArrayList<>();

    @Override
    public void registerPlane(Airplane plane) {
        planes.add(plane);
        System.out.println(plane.getName() + " 已向塔台注册");
    }

    @Override
    public void requestLanding(Airplane plane) {
        System.out.println(plane.getName() + " 请求降落");
        boolean runwayAvailable = true;
        for (Airplane p : planes) {
            if (p.isLanding()) {
                runwayAvailable = false;
                break;
            }
        }
        if (runwayAvailable) {
            System.out.println("塔台批准 " + plane.getName() + " 降落");
            plane.land();
        } else {
            System.out.println("跑道繁忙," + plane.getName() + " 等待降落");
        }
    }

    @Override
    public void confirmLanding(Airplane plane) {
        System.out.println(plane.getName() + " 已安全降落");
    }
}

// 抽象同事类:飞机
abstract class Airplane {
    protected TowerMediator mediator;
    protected String name;
    protected boolean landing;

    public Airplane(TowerMediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
        this.landing = false;
        mediator.registerPlane(this);
    }

    public String getName() {
        return name;
    }

    public boolean isLanding() {
        return landing;
    }

    public void requestLanding() {
        mediator.requestLanding(this);
    }

    public void land() {
        this.landing = true;
        System.out.println(name + " 正在降落");
        // 模拟降落过程
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        mediator.confirmLanding(this);
        this.landing = false;
    }
}

// 具体同事类:客机
class PassengerPlane extends Airplane {
    public PassengerPlane(TowerMediator mediator, String name) {
        super(mediator, name);
    }
}

// 客户端代码
public class AirportSystem {
    public static void main(String[] args) {
        TowerMediator tower = new AirportTower();
        Airplane plane1 = new PassengerPlane(tower, "客机1号");
        Airplane plane2 = new PassengerPlane(tower, "客机2号");

        plane1.requestLanding();
        plane2.requestLanding();
    }
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐