码迷,mamicode.com
首页 > 其他好文 > 详细

14.中介者模式

时间:2018-12-25 22:23:05      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:imp   ref   hash   关系   market   inter   存在   control   eth   

中介者模式:

如果一个系统中,对象与对象之间的关系呈网状结构,对象与对象之间存在大量多对多关系,这些对象称为“同事对象”。引入一个中介者对象,通过该对象与其他同事对象打交道,将复杂的网状结构变成星型结构。

类图:

技术分享图片

//中介者抽象类
public interface Mediator {
    public void register(String dname,Department d);
    public void commands(String dname);
}

public class Persident implements Mediator{
    private Map<String, Department> map = new HashMap<String, Department>();
    @Override
    public void register(String dname, Department d) {
        // TODO Auto-generated method stub
        map.put(dname, d);
    }

    @Override
    public void commands(String dname) {
        // TODO Auto-generated method stub
        map.get(dname).selfAction();
    }
}

public interface Department {
    public void selfAction();
    public void outAction();
}
public class Developement implements Department{
    private Mediator meidator;
    
    public Developement(Mediator meidator) {
        super();
        this.meidator = meidator;
        meidator.register("Development", this);
    }

    @Override
    public void selfAction() {
        // TODO Auto-generated method stub
        System.out.println("搞研发");
    }

    @Override
    public void outAction() {
        // TODO Auto-generated method stub
        System.out.println("汇报工作");
        meidator.commands("Development");
    }    
}

public class Finacial implements Department{
    private Mediator meidator;
    
    public Finacial(Mediator meidator) {
        super();
        this.meidator = meidator;
        meidator.register("Finacial", this);
    }

    @Override
    public void selfAction() {
        // TODO Auto-generated method stub
        System.out.println("数钱");
    }

    @Override
    public void outAction() {
        // TODO Auto-generated method stub
        System.out.println("汇报工作,没钱了");
        meidator.commands("Market");
    }
    
}

public class Market implements Department{
    private Mediator meidator;
    
    public Market(Mediator meidator) {
        super();
        this.meidator = meidator;
        meidator.register("Market", this);
    }

    @Override
    public void selfAction() {
        // TODO Auto-generated method stub
        System.out.println("市场调研");
    }

    @Override
    public void outAction() {
        // TODO Auto-generated method stub
        System.out.println("汇报工作,市场");
        meidator.commands("Finacial");
    }
}
public class Client {
    public static void main(String[] args) {
        Mediator mediator = new Persident();
        
        Market market = new Market(mediator);
        Finacial finacial = new Finacial(mediator);
        Developement developement = new Developement(mediator);
        
        market.selfAction();
        market.outAction();
        
    }
}
运行结果:

市场调研
汇报工作,市场
数钱


本质:解耦多个同事之间的交互关系,每个对象都持有中介对象的引用,只用跟中介者打交道。通过中介对象同一管理同事对象之间的交互关系。

开发中常见场景:MVC模式,control层用来与M和V层进行交互,作为M和V的中介。

GUI编程中,多个组件对象进行交互,可以引入一个中介对象来控制。

java.lang.reflect.Method#invoke()方法

 

14.中介者模式

标签:imp   ref   hash   关系   market   inter   存在   control   eth   

原文地址:https://www.cnblogs.com/menbo/p/10176703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!