JAVA设计模式(14):行为型-中介者模式(Mediator)

场景

假如没有总经理。下面三个部门:财务部、市场部、研发部。财务部要发工资,让大家核对公司需要市场需要跟市场部和研发部通气;市场部需要接个新项目,需要研发部处理技术、需要财务部出资金。市场部跟各个部门打交道。虽然只有三个部门,但是关系非常乱。

实际上,公司都有总经理。各个部门有什么事情都通报到总经理这里,总经理再通知各个相关部门。

这就是一个典型的中介者模式

总经理起到一个中介、协调的作用

核心

如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为“同事对象”

我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网状结构化解为如下的星状结构。

中介者模式的本质

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

public interface Department {
	/**/
	void selfAction();
	/*向总经理发出请求*/
	void outAction();
}

public class Development implements Department{
	/*持有中介者的引用*/
	private Mediator mediator;

	public Development(Mediator mediator) {
		super();
		this.mediator = mediator;
		mediator.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("汇报工作:没钱了,需要资金支持");
		mediator.command("finacial");
	}

}

public class Finacial implements Department{
	/*持有中介者的引用*/
	private Mediator mediator;

	public Finacial(Mediator mediator) {
		super();
		this.mediator = mediator;
		mediator.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("汇报工作:钱太多了,怎么花");
	}

}

public class Market implements Department{
	/*持有中介者的引用*/
	private Mediator mediator;

	public Market(Mediator mediator) {
		super();
		this.mediator = mediator;
		mediator.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("汇报工作:需要资金支持");
		mediator.command("finacial");
	}

}

public interface Mediator {
	void register(String dname,Department dept);

	void command(String dname);
}

public class President implements Mediator{

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

	@Override
	public void register(String dname, Department dept) {
		// TODO Auto-generated method stub
		map.put(dname, dept);
	}

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

}

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mediator m = new President();

		Market market = new Market(m);
		Development devp = new Development(m);
		Finacial f = new Finacial(m);

		market.selfAction();
		market.outAction();
	}

}
时间: 2024-10-08 03:34:11

JAVA设计模式(14):行为型-中介者模式(Mediator)的相关文章

[设计模式-行为型]中介者模式(Mediator)

一句话 又翻译成调停者模式. 就是类似房产中介, 买房.卖方不需要双方直接交涉,交给中介. 概括 解析 MEDIATOR-四个MM打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话. 调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.从而使他们可以松散偶合.当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用.保证这些作用可以彼此独立的变化

设计模式之二十一:中介者模式(Mediator)

中介者模式:定义了一个对象,用来封装一系列对象的交互.中介者模式通过使对象之间不必显式引用降低了对象之间的耦合,并且允许你独立改变它们之间的交互. 中介者模式就是将对象之间的交互封装在了一个独立的对象中,这个独立的对象用来控制对象之间的交互行为,所以这个对象还是蛮复杂的. UML类图: 主要包括: Mediator:定义了一个Colleague对象之间交互的接口. ConcreteMediator:实现了Colleague对象之间的交互行为,并了解和能操作Colleague对象. Colleag

[设计模式]&lt;8&gt;. C++与中介者模式(mediator pattern)

意图:用一个中介者对象封装一系列的对象交互.中介者使各对象不需要显式的相互引用,从而减小耦合. 原文:默默的EEer 地址:http://www.cnblogs.com/hebaichuanyeah/p/6091506.html 实际就是指,利用一个中介者对象来连接两个对象的操作.例如需求是,A对象更新/改变了,B对象也跟着相应的更新/改变,不通过直接调用B对象 一个例子,详见注释 #include <iostream> using namespace std; class Colleague

设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各个对象中. 对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系.虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会降低其可复用性,大量的相互连接使得一个对象似乎不太可能

java设计模式-创建型

1.设计模式介绍 1.1 设计模式的概念 1.设计模式是一套被反复使用,多数人知晓,经过分类编码目的的优秀代码设计经验的总结. 2.设计模式贯彻的原理:面向接口编程,而不是面向对象实现. 3.设计模式的目标:降低耦合性,增强灵活性. 1.2 设计模式的要素 1.模式名称 2.问题 3.环境与初始环境 4.解决方案 5.效果 6.举例 7.末态环境 8.推理 9.其他有关模式 10.已知的应用 1.3设计模式的分类 1.创建型 1.1  单例模式 1.2  工厂模式 1.3  抽象工厂模式 1.4

设计模式之中介者模式(Mediator)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

从王者荣耀看设计模式(二十一.中介者模式)

从王者荣耀看设计模式(中介者模式) 一.简介 在王者荣耀中,有一个简单的聊天室,在聊天室中.玩家点击综合可以与全服的玩家发送消息,点击好友可向指定好友玩家私发信息.|??ω?` ) 二.模式动机 联合国是一个协调组织,各个国家就一些共同问题经由联合国进行协商,它取代了原本各个国家之间的直接交流,将各个成员国之间的强耦合关系转换为较为松散的耦合关系.在软件开发中,我们有时候也会需要使用类似联合国一样的中间对象来降低系统中类与类,对象与对象之间的耦合关系. 在本实例中,玩家与玩家多对多的通信,导致用

Java设计模式(一)普通工场模式,抽象工场模式

设计模式 设计模式我觉得是前人总结的,为了解决一类问题而总结的代码设计经验.最初可能为了使用而使用,后面就会发现,很多没想到的问题因为使用了正确的设计模式已经为你考虑到了.<design patterns设计模式>这本书是程序员进阶必学. (一)工厂模式 工厂模式的意义在于定义一个用于创建对象的接口,并控制返回哪个类的实例.网上比较流行的一个普通工厂模式的例子. interface Sender{ public void send(); } class MainSender implement

Java设计模式(三)-装饰者模式

我们都知道,可以使用两种方式给一个类或者对象添加行为. 一是使用继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有自身方法的同时,还可以拥有父类的方法.但是使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机. 二是使用关联.组合即将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用该对象来扩展自己的行为.这是一种动态的方式,我们可以在应用程序中动态的控制. 与继承相比,关联关系的优势就在于不会破坏类的封装性,且具有较好的松耦合

Java设计模式(四) 装饰器模式 代理器模式

(七)装饰器模式 Decorator 装饰器模式是为了动态的给一个对象增加一些新功能.装饰对象与被装饰的对象需要实现同一个接口,装饰对象持有被装饰对象的实例. interface DecoratorSourceable{ public void method(); } //被装饰类 class DecoratorSource implements DecoratorSourceable{ public void method(){ System.out.println("Source"