JAVA设计模式之中介模式

JAVA设计模式之中介模式

概念:

中介模式(mediator):如果一个系统中对象之间是网状结构的,多对多的关系,会导致系统极其复杂,此时可以引入一个中介者对象,负责各个对象的协调,即各个对象只跟中介者打交道,这样负责网络结构就转化为星状结构。
中介者模式

类图

中介者模式类图

应用

  1. MVC模式中的C,控制器就是一个中介者对象。M和V都和他打交道。
  2. 窗口游戏程序,窗口软件开发中窗口也是一个中介者对象。
  3. 图像界面开发GUI,对个组件之间的交互,可以通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象
  4. java.lang.reflect.Method#invoke()De

代码

中介者模式举例类图

Mediator接口:

public interface Mediator {
    void register(String name, Department department);

    void commond(String departmentName);
}

具体中介者:

public class President implements Mediator {
    private Map<String, Department> departmentMap = new HashMap<>();

    @Override
    public void register(String name, Department department) {
        this.departmentMap.put(name, department);
    }

    @Override
    public void commond(String departmentName) {
        Department d = this.departmentMap.get(departmentName);
        d.outAction();
    }
}

部门接口:

public interface Department {
    void selfAction();

    void outAction();
}

具体部门:

public class Development implements Department {
    private Mediator mediator;
    private String name;

    public Development(Mediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
        mediator.register(name, this);
    }

    @Override
    public void selfAction() {
        System.out.println(name + " coding");
    }

    @Override
    public void outAction() {
        System.out.println(name + " server is over, need new server");
        mediator.commond("financial");
    }
}
public class Financial implements Department {
    private Mediator mediator;
    private String name;

    public Financial(Mediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
        mediator.register(name, this);
    }

    @Override
    public void selfAction() {
        System.out.println(name + " manage money. get money");
    }

    @Override
    public void outAction() {
        System.out.println(name + " send monney");
    }
}
public class Market implements Department {
    private Mediator mediator;
    private String name;

    public Market(Mediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
        mediator.register(name, this);
    }

    @Override
    public void selfAction() {
        System.out.println(name + "sold production.");
    }

    @Override
    public void outAction() {
        System.out.println(name + "plan a activity, need money");
        mediator.commond("financial");
    }
}

客户端调用:

public class Main {
    public static void main(String[] args) {
        President president = new President();
        Development development = new Development(president, "development");
        Financial financial = new Financial(president, "financial");
        Market market = new Market(president, "market");

        development.selfAction();
        development.outAction();

    }
}

总结

中介者模式的本质是解耦各个同时对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象同意管理这些交互关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值