设计模式之中介者模式

设计模式之中介者模式

核心:
同事对象:对象之间存在大量多对多关系
中介者对象:使各个同事对象只跟中介者对象打交道

实例:总经理 研发部 市场部 财务部

Meditor

package com.meditor;

/**
 * 中介者接口
 */
public interface Meditor {
    void register(String name,Department department);
    void command(String name);
}

President

package com.meditor;

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

/**
 * 总经理
 */
public class President implements Meditor {
    //部门名称,部门工作
    private Map<String,Department> map = new HashMap<String, Department>();
    
    @Override
    public void register(String name, Department department) {
	    //加入部门
	    map.put(name,department );
    }
    
    @Override
    public void command(String name) {
	    //命令某个部门工作
	    map.get(name).selfAction();
    }
}

Department

package com.meditor;

/**
 * 同事类接口
 */
public interface Department {
    void selfAction();//做本部门工作
    void outAction();//向总经理发出申请
}

Development

package com.meditor;

/**
 * 研发部
 */
public class Development implements Department {

    //持有中介者(总经理)的引用
    private Meditor m;
    
    public Development(Meditor m) {
	    super();
	    this.m = m;
	    m.register("development",this );
    }
    
    @Override
    public void selfAction() {
    	System.out.println("专心科研,开发项目");
    }
    
    @Override
    public void outAction() {
    	System.out.println("汇报情况,需要财务支持");
    
    	m.command("financial");
    }
}

Market

package com.meditor;

/**
 * 市场部
 */
public class Market implements Department {

    //持有中介者(总经理)的引用
    private Meditor m;
    
    public Market(Meditor 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("financial");
    }
}

Financial

package com.meditor;

/**
 * 财务部
 */
public class Financial implements Department {

    //持有中介者(总经理)的引用
    private Meditor m;
    
    public Financial(Meditor m) {
	    super();
	    this.m = m;
	    m.register("financial",this );
    }
    
    @Override
    public void selfAction() {
    	System.out.println("数钱");
    }
    
    @Override
    public void outAction() {
    	System.out.println("汇报工作,怎么花钱");
    
    }
}

Client

package com.meditor;

public class Client {
    public static void main(String[] args) {
	    //总经理
	    Meditor president = new President();
	    
	    Development development = new Development(president);//研发部
	    Financial financial = new Financial(president);//财务部
	    Market market = new Market(president);//市场部
	    
	    System.out.println("----------市场部-----------");
	    market.selfAction();
	    market.outAction();
	    
	    System.out.println("----------财务部-----------");
	    financial.selfAction();
	    financial.outAction();
	    
	    System.out.println("----------研发部-----------");
	    development.selfAction();
	    development.outAction();
    }

}

结果:

----------市场部-----------
跑业务
汇报情况,项目的进度需要资金支持
数钱
----------财务部-----------
数钱
汇报工作,怎么花钱
----------研发部-----------
专心科研,开发项目
汇报情况,需要财务支持
数钱

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

常见场景:
1)MVC模式
2)窗口游戏程序
3)图像界面GUI中,多个组件之间的交互,可通过引入一个中介者对象来解决

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值