中介者模式

xiaoxiao2021-02-28  47

1.使用场景: 系统中的关系比较复杂,存在网状的关系。例如经典的MVC模式中的”C”-Controller就是一个中介者对象还有例如Java反射中的invoke()方法中也是使用到了中介者模式。 2.UML表示 2.1 Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类的方式实现。 2.2 ConcreteMediator:具体中介者角色,继承于抽象中介者,实现了父类定义的方法,它从具体的同事对象接受消息,向具体同事对象发出命令。 2.3 Colleague:抽象同事类角色,定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。 2.4 ConcreteColleague1、ConcreteColleague2:具体同事类角色,继承于抽象同事类,每个具体同事类都知道本身在小范围的行为,而不知道在大范围内的目的。

具体的UML示意图如下:

3.代码实现

定义中介者接口:

 

public interface Mediator { /** * * @author lsj * @date 2018/2/14 16:43 * @param [dName, dt] * @return void */ void register(String dName,Department dt); /** * * @author lsj * @date 2018/2/14 16:43 * @param [dName] * @return void */ void command(String dName); }

实现接口:

 

 

public class President implements Mediator{ private Map<String,Department> map=new HashMap<>(); @Override public void register(String dName, Department dt) { map.put(dName,dt); } @Override public void command(String dName) { map.get(dName).selfAction(); } }

定义Department接口:

 

 

public interface Department { /** * * @author lsj * @date 2018/2/14 16:45 * @param [] * @return void */ void selfAction();// /** * * @author lsj * @date 2018/2/14 16:45 * @param [] * @return void */ void outAction(); }

我们定义一个研发部来实现这个接口:

 

 

public class Development implements Department{ private Mediator m; public Development(Mediator m) { this.m = m; } @Override public void selfAction() { System.out.println("研发"); } @Override public void outAction() { System.out.println("需要资金"); } }

限于篇幅,这里省略其他的部门类。 最后,我们通过一个简单的例子进行测试:

public class Client { public static void main(String[] args) { Mediator m=new President();//中介者对象 Market market=new Market(m); market.selfAction(); market.outAction(); } }

4.总结 中介者模式用于解耦多个对象之间的关系。每个对象都会持有一个中介者的对象,然后通过中介者统一管理这些交互的关系。 下面给出项目的链接: https://github.com/memoryexplosion/design_pattern_review/tree/master/src/java/mediator  

 

转载请注明原文地址: https://www.6miu.com/read-2612988.html

最新回复(0)