中介者模式

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值