学习笔记——JAVA设计模式<14>中介者模式

中介者模式Mediator

  • 中介者模式核心
    • 如果一个系统中对戏那个之间的联系呈现为网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象”
    • 我们可以引入一个中介对象,使各个同事对象只跟中介者对象打交道,将复杂的网状结构变为星状结构

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

模拟公司各部

package studyGFO;

public interface Mediator {

    void register(String dname,Department d);
    void command(String dname);
}
package studyGFO;

import java.util.HashMap;
import java.util.Map;

public class President implements Mediator{

    private Map<String, Department> map = new HashMap<>();

    @Override
    public void register(String dname, Department d) {
        map.put(dname, d);
    }

    @Override
    public void command(String dname) {
        map.get(dname).selfAction();
    }

}
package studyGFO;
/**
 * 同事类
 * @author http://blog.csdn.net/thewaiting
 *
 */
public interface Department {
    void selfAction();//做本部门的事
    void outAction();//向总经理发出申请
}
package studyGFO;
/**
 * 开发部
 * @author http://blog.csdn.net/thewaiting
 *
 */
public class Development implements Department{

    private  Mediator m;//持有中介者(总经理)的引用

    public Development(Mediator m) {
        super();
        this.m = m;
        m.register("development", this);
    }

    @Override
    public void selfAction() {
        System.out.println("开发项目");
    }

    @Override
    public void outAction() {
        System.out.println("汇报工作");
    }

}
package studyGFO;
/**
 * 财务部
 * @author http://blog.csdn.net/thewaiting
 *
 */
public class Finacial implements Department{

    private  Mediator m;//持有中介者(总经理)的引用

    public Finacial(Mediator m) {
        super();
        this.m = m;
        m.register("finacial", this);
    }

    @Override
    public void selfAction() {
        System.out.println("发钱");
    }

    @Override
    public void outAction() {
        System.out.println("汇报数钱");
    }

}
package studyGFO;
/**
 * 市场部
 * @author http://blog.csdn.net/thewaiting
 *
 */
public class Market implements Department{

    private  Mediator m;//持有中介者(总经理)的引用

    public Market(Mediator m) {
        super();
        this.m = m;
        m.register("market", this);
    }

    @Override
    public void selfAction() {
        System.out.println("买东西");
    }

    @Override
    public void outAction() {
        System.out.println("汇报买东西");
        //通过中介调用了需要的方法
        //财务部给市场部发钱
        m.command("finacial");
    }

}
package studyGFO;

public class Client {
    public static void main(String[] args) {
        Mediator m = new President();

        Market market  = new Market(m);
        Development development = new Development(m);
        Finacial  finacial =  new Finacial(m);

        market.selfAction();
        market.outAction();
    }
}
运行结果
买东西
汇报买东西
数钱

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值