中介者模式

发布于:2024-10-11 ⋅ 阅读:(156) ⋅ 点赞:(0)

中介者模式

中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。

请添加图片描述

案例

控制塔台:

public class ControlTower {
    private boolean canDo = true;

    public void acceptRequest(){
        if(canDo){
            System.out.println("允许。。");
            canDo = false;
        }else{
            System.out.println("不允许。。");
        }
    }

    public void finish(){
        canDo = true;
    }
}

机长:

public abstract class Captain {
    abstract void fly();
    abstract void land();
    abstract void success();

public class HU8778 extends Captain{

    ControlTower controlTower;

    public void setControlTower(ControlTower controlTower) {
        this.controlTower = controlTower;
    }

    @Override
    void fly() {
        System.out.println("HU8778请求起飞......");
        //问每个机长能否起飞?
        controlTower.acceptRequest();
    }

    @Override
    void land() {
        System.out.println("HU8778请求降落......");
        controlTower.acceptRequest();
    }

    @Override
    void success() {
        System.out.println("完成......");
        controlTower.finish();
    }
}
public class SC8633 extends Captain{
    ControlTower controlTower ;

    public void setControlTower(ControlTower controlTower) {
        this.controlTower = controlTower;
    }

    @Override
    void fly() {
        System.out.println("SC8633 请求起飞......");
        //问每个机长能否起飞?
        controlTower.acceptRequest();

    }

    @Override
    void land() {

        System.out.println("SC8633 请求降落......");
        //问每个机长能否起飞?
        controlTower.acceptRequest();
    }

    @Override
    void success() {

        System.out.println("SC8633 完成......");
        //问每个机长能否起飞?
        controlTower.finish();
    }
}

测试:

public class Main {
    public static void main(String[] args) {
        ControlTower controlTower = new ControlTower();
        HU8778 hu8778 = new HU8778();
        SC8633 sc8633 = new SC8633();
        hu8778.setControlTower(controlTower);
        sc8633.setControlTower(controlTower);

        hu8778.fly();
        sc8633.fly();

        hu8778.success();
        sc8633.fly();
    }
}