定义与结构GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它 们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。 当然并不是所有的对象都需要加入“中介”对象。如果对象之间的关系原本一目了然,中介对象的加入便是“画蛇添足”。 来看下中介者模式的组成部分吧。 1) 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。 2) 具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。 3) 同事(Colleague)角色:每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。 来自《设计模式》一书的类图:
由于中介者的行为与要使用的数据与具体业务紧密相关,抽象中介者角色提供一个能方便很多对象使用的接口是不太现实的。所以抽象中介者角色往往是不存在 的,或者只是一个标示接口。如果有幸能够提炼出真正带有行为的抽象中介者角色,我想同事角色对具体中介者角色的选择也是策略的一种应用。
1:具体的中介者接口:这里定义两个方法,一个简单的构造一个,通知同事的改变。
package mediator;
/**
* 中介者的接口
* @author zero
*
*/
public interface Mediator {
public void createColleagues();
public void colleagueChanged(Colleague colleague);
}
2:定义一个同事的抽象类:这里面别忘了把中介加进去。要不中介可不知道同事的改变。
package mediator;
/**
* 同事类
* @author zero
*
*/
public abstract class Colleague {
private final Mediator fMediator;
public Colleague(Mediator mediator) {
super();
fMediator = mediator;
}
protected void changed() {
fMediator.colleagueChanged(this);
}
}
3:一个具体的中介者:这里为了区分是哪个同事类发生改变,给同事类的子类增加了,name的标签。
package mediator;
/**
* 具体的中介者实现
* @author zero
*
*/
public class ConcreteMediator implements Mediator {
public void createColleagues() {
}
public void colleagueChanged(Colleague colleague) {
System.out.println(((ConcreteColleague)colleague).getName()+"同事发生改变了");
}
}
4:一个具体的同事类:继承同事类,多增加一个署名方法。
package mediator;
/**
* 具体的中介同事
*
* @author zero
*
*/
public class ConcreteColleague extends Colleague {
private final String name;
public ConcreteColleague(Mediator mediator, String name) {
super(mediator);
this.name=name;
}
public String getName() {
return name;
}
}
5:最后我们的测试类:
package mediator;
public class MediatorTest {
/**
* @param args
*/
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague(mediator,"one");
colleague1.changed();
Colleague colleague2 = new ConcreteColleague(mediator,"two");
colleague2.changed();
}
}
|
分享到:
相关推荐
JAVA-设计模式-行为型模式-中介者模式
c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
**中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...
中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...
中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...
**中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...
这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...
在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
PPT内容包括:内附代码,实例,方便理解。...设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,为软件开发提供了可复用的解决方案。在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计...
### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...
### 设计模式--可复用面向对象软件的基础 #### 一、概述 ...总之,《设计模式--可复用面向对象软件的基础》不仅是一本经典的面向对象设计模式教材,也是一本值得反复阅读和深入思考的高级编程指南。
在本压缩包“设计模式-2”中,可能包含了关于设计模式的详细资料,包括各种设计模式的定义、应用场景、优缺点以及实现方式。 一、设计模式分类 设计模式分为三大类:创建型模式、结构型模式和行为型模式。 1. ...