`
PV_love
  • 浏览: 30545 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

02_中介者模式

阅读更多
中介者模式定义:用一个中介对象来封装一些列的对象交互。中介者使个对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们的交互

我擦,看到上面的这段话,感觉把本来你知道的意思往你不明白的意思上面说啊;实际上就跟找房子似的,你要找房,房东要租房子,中间得通过中介,吐槽一下北京中介行业的混乱现象;这样就不用你自己和房东去接触,砍价还价之类的;而且你和房东可以松耦合,你俩老死不相往来啊
中介者是协调对象的,对象之间的交互都通过中介来完成;

一般中介者是一个抽象类;具体中介者的实现类需要了解各个对象的信息;中介者实现类的责任重了;业务简单可以去除抽象;

为什么要用中介者模式呢?系统分割许多对象可以增加其可复用性,对象连接的增加也会降低可复用性,大量的连接使得对象不可能在没有其他对象的支持下工作,系统变为一个不可分割的整体;对系统进行较大的改动比较困难;

适用场景:
一组对象以良好的定义但是复杂的交互进行通信;以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合;

典型应用计算器:要慎用;如果出现多对多交互复杂的对象时;反思设计是否合理;

优点和缺点都是它自身啊;

将对象如何协作进行抽象,即对象之间的交互;将中介作为一个独立的概念并将其封装在一个对象中,将对象各自行为本身的的行为转移到他们之间的交互上面来;更宏观的看待系统;将交互复杂转换到了中介者的复杂,控制集中;缺点就是中介者实现类的复杂度比每个对象都要高;

代码例子就是 美国和伊拉克发表声明都是通过联合国安理会发布;而不是两个人对着掐;两国不必直接接触;

package mediator;

public abstract class Country {

	protected UnitedNations mediator;

	public Country(UnitedNations mediator) {
		this.mediator = mediator;
	}
http://pv-love.iteye.com/admin/blogs/1908162/edit#
	public void declare(String message) {
		mediator.declare(message, this);
	}

	public void getMessage(String message) {
		System.out.println(this.getClass().getSimpleName() + " 获得的信息是:"
				+ message);
	}
}

package mediator;

public class Iraq extends Country {

	public Iraq(UnitedNations mediator) {
		super(mediator);
	}

}


package mediator;

public class USA extends Country {

	public USA(UnitedNations mediator) {
		super(mediator);
	}

}


package mediator;

public abstract class UnitedNations {
	public abstract void declare(String message, Country colleague);
}

package mediator;

public class UnitedNationsSecurityCouncil extends UnitedNations {

	private Country usa;
	private Country iraq;

	@Override
	public void declare(String message, Country colleague) {
		if (colleague == getUsa()) {
			getIraq().getMessage(message);
		} else if (colleague == getIraq()) {
			getUsa().getMessage(message);
		}
	}

	public void setUsa(Country usa) {
		this.usa = usa;
	}

	public Country getUsa() {
		return usa;
	}

	public void setIraq(Country iraq) {
		this.iraq = iraq;
	}

	public Country getIraq() {
		return iraq;
	}
}

package mediator;

public class TestMediator {
	public static void main(String args[]) {
		UnitedNationsSecurityCouncil unsc = new UnitedNationsSecurityCouncil();
		Country usa = new USA(unsc);
		Country iraq = new Iraq(unsc);
		unsc.setUsa(usa);
		unsc.setIraq(iraq);
		usa.declare("别造原子弹啊,要不然我打你");
		iraq.declare("光脚不怕穿鞋的,我擦,你来打啊");
	}
}


输出下面的文字,他们之间的通信都是通过安理会完成的
Iraq 获得的信息是:别造原子弹啊,要不然我打你
USA 获得的信息是:光脚不怕穿鞋的,我擦,你来打啊[size=large][/size]
分享到:
评论

相关推荐

    DAY02_设计模式.pdf

    - 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,且可以独立地改变它们之间的交互。 - 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。...设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    设计模式PPT.rar

    12第十二讲代理模式 13第十三讲外观模式 14第十四讲组合模式 15第十五讲桥接模式 16第十六讲适配器模式 17第十七讲解释器模式 18第十八讲中介者模式 19第十九讲职责链模式 20第二十讲迭代模式 21第二十一讲模板方法...

    C#23种设计模式

    18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State ...

    第03章 从架构层面看设计模式02.pdf

    本章节通过一个电商设计模式实战案例,详细阐述了代理模式、享元模式、装饰者模式、工厂模式和状态模式在实际业务场景中的运用。 1. 代理模式 代理模式的核心在于提供一个代理对象,它充当原对象的中介,控制对原...

    《设计模式》课件02

    - 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获和恢复对象的内部状态。 - 观察者模式(Observer):定义对象之间的一对多依赖...

    02-控制反转和服务容器(1).html

    在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。...中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,剖析了这二十三种设计模式的关系。

    软件开发与项目管理-1期 KC02_课程案例_基于Web2.0的旅游资讯网站开发.doc

    5) **去中心化模式**:以用户生成内容(UGC)为主的去中心化模式,如点评类和攻略类网站,为旅游者提供了更丰富的个性化信息,但信息的准确性和一致性有待提升。 基于以上分析,Web2.0的旅游资讯网站开发将着重于...

    [源代码] 修炼Java开发技术 在架构中体验设计模式和算法之美 (源代码)

    - (Chapter15.rar)Chapter 16 解释器模式 - (Chapter16.rar)Chapter 17 命令模式 - (Chapter17.rar)Chapter 18 迭代器模式 - (Chapter18.rar)Chapter 19 中介者模式 - (Chapter19.rar)Chapter 20 备忘录模式 - ...

    第02章电子商务业务模式与盈利模式.pptx

    业务模式的核心在于价值,它涵盖了面向客户的价值、面向投资者的价值和面向伙伴的价值。 电子商务的业务模式大致分为以下几类: 1. 电子商店:企业通过互联网直接销售商品,如Amazon.com。 2. 信息中介商:提供...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...

    设计模式PDF清晰版

    3. 行为型模式:这一类模式主要关注对象间如何通信,以及责任分配,包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)...

    《Java设计模式》课件

    01统一建模语言基础知识 02面向对象设计原则 03设计模式概述 04简单工厂模式 05工厂方法模式 06抽象工厂模式 ...21中介者模式 22备忘录模式 23观察者模式 24状态模式 25策略模式 26模板方法模式 27访问者模式

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...

    软件开发与项目管理-1期 KC02_课程案例_网上招聘系统的设计与实现.doc

    在线招聘系统采用Browser/Client模式,减少了中介环节,提升了招聘效率,同时实现了环保的无纸化办公,有助于企业的竞争力提升。 2. 课题研究内容: 系统设计主要分为前台和后台两个部分。前台功能主要包括用户注册...

    A篇02电子商务流程与交易模式[1].pptx

    根据企业在交易中的地位,B2B模式可大致分为中介模式、以卖方为主的模式、以买方为主的模式和买方整合模式。其中,阿里巴巴是中介模式的成功案例,而海尔B2B代表了以买方为主的模式。 此外,B2B模式还可以按照商务...

    设计模式上册

    3. **行为型模式**:行为型模式主要关注对象之间的交互和职责分配,如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/...

Global site tag (gtag.js) - Google Analytics