`

六十三:调停者模式

阅读更多
调停者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用,从而使它们可以较松散地耦合,当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用,从而保证这些相互作用可以彼此独立地变化.
不要对设计模式有盲目的崇拜和过分地追求.我们要全力以赴地为我们所面临的困难找出最好的设计,而不是将力气放在如何尽可能多和频繁地使用著名的模式.最主要的是需求不要和设计脱节.停调者模式是很容易被滥用的模式.

一:为什么需要调停者对象
如果有大量的对象,这些对象既会影响到别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象。如果几乎每一个对象都需要和其他对象发生作用,而这种作用表现为一个对象与另一个对象的直接耦合,这将造成系统过度耦合.如果引入调停者对象(Mediator),可以将系统的网状结构变成以Mediator为中介的星形结构.这样可以使对象之间增加协作性,减少耦合度.
一个对象往往要与几个对象发生相互作用,就好比在一个小组中工作的人一样,每一个人都要与他的同事发生相互作用。这时,一个直接了当的不好的设计会把那些与他的对象固定到每一个对象上面,这样做的结果自然是使这些对象独立演化的难度增加,使每一个对象的变化都会影响到所有与之发生相互作用的对象。这就好比每一个在小组中工作的人都要成为其他人的经理,不仅仅要管好自己,还有管好其他有的同事.在实际工作中,一个有效的管理制度是给这个小组配备一个小组长,负责协调小组成员之间的关系,小组的同事通过小组长可以形成整个小组的行为,这实际上就是调停者模式的精神.
在没有WTO之前,各个贸易地区自行进行的相互协调和谈判进行交易,在有WTO(相当于调停者)后,各国的贸易由WTO进行协调.

二:调停者角色
此模式主要包含有如下角色:
(A)抽象调停者角色:定义出同事对象到调停者对象的接口,其中主要的方法是一个(或多个)事件方法.在有些情况下,这个抽象可以省略。
(B)具体调停者角色:实现抽象调停者角色,具体调停者知道所有的具体同事类,它从具体同事对象接收消息,向具体同事对象出出命令
(C)抽象同事类角色:定义出调停者到同事对象的接口。同事对象只知道调停者而不知道其余的同事对象(这和现实不同哦)
(D)具体同事类角色:每一个具体同事类都很清楚自己在小范围的行为,而不知道它在大范围内的目的.
下面是示意源码:
package cai.milenfan.basic.test;
//抽象同事角色
public abstract class Colleague {
private Mediator mediator;
public Mediator getMediator() {
return mediator;
}
public Colleague(Mediator m) {
mediator = m;
}
public abstract void action();
public void change() {
mediator.colleagueChanged(this);
}
}


package cai.milenfan.basic.test;

public class Colleague1 extends Colleague {
public Colleague1(Mediator m) {
super(m);
}
public void action() {
System.out.println("This is an action from Colleague 1");
}
}


package cai.milenfan.basic.test;

public class Colleague2 extends Colleague {
public Colleague2(Mediator m) {
super(m);
}
public void action() {
System.out.println("This is an action from Colleague 2");
}
}


package cai.milenfan.basic.test;

public class Colleague3 extends Colleague {
public Colleague3(Mediator m) {
super(m);
}
public void action() {
System.out.println("This is an action from Colleague 3");
}
}


package cai.milenfan.basic.test;

public abstract class Mediator {
public abstract void colleagueChanged(Colleague c);
public static void main(String args[]) {
ConcreteMediator mediator = new ConcreteMediator();
mediator.createConcreteMediator();
Colleague c1 = new Colleague1(mediator);
Colleague c2 = new Colleague2(mediator);
mediator.colleagueChanged(c1);
}
}


package cai.milenfan.basic.test;

public class ConcreteMediator extends Mediator {
private Colleague1 colleague1;
private Colleague2 colleague2;
public void colleagueChanged(Colleague c) {
colleague1.action();
colleague2.action();
}
public void createConcreteMediator() {
colleague1 = new Colleague1(this);
colleague2 = new Colleague2(this);
}
public Colleague1 getColleague1() {
return colleague1;
}
public Colleague2 getColleague2() {
return colleague2;
}
}
分享到:
评论

相关推荐

    调停者模式

    ### 调停者模式详解 #### 概述 调停者模式是一种行为设计模式,其核心在于通过引入一个中间对象或服务来管理多个对象之间的交互,从而降低系统的耦合度,提高系统的灵活性和可维护性。在Java设计模式中,调停者...

    JAVA设计模式之调停者模式详解

    调停者模式是一种设计模式,属于对象的行为模式,其主要目的是降低对象之间的耦合度,使得对象之间的交互更加灵活且易于管理。在Java中,调停者模式通过引入一个中介对象,也就是调停者,来协调多个对象之间的交互,...

    [源代码] 《易学 设计模式》 随书源代码

    第23章 左右逢源:调停者模式 (Mediator) 第24章 白纸黑字:备忘录模式 (Memento) 第25章 周而复始:迭代器模式 (Iterator) 第26章 望文生义:解释器模式 (Interpreter) 第27章 无招胜有招:如何在设计中应用设计...

    Java课堂:Java开发下的设计模式简单说明

    14. 调停者模式(Mediator):调停者模式通过一个中介对象协调多个对象之间的交互,降低对象间的耦合度。 15. 备忘录模式(Memento):备忘录模式用于在不破坏封装的前提下,保存对象的状态,以便在需要时恢复。 ...

    C++面向对象23种设计模式实现源码DesignPattern.zip

    4. **调停者模式(Mediator Pattern)**:调停者模式用于降低多个对象之间的耦合度,通过一个中介对象协调它们之间的通信。18.调停者模式Mediator展示了如何通过一个仲裁者类来处理对象间的交互,避免对象之间直接...

    浅析java常用的设计模式(doc-23页).doc

    15. **调停者模式**:调停者模式用于降低多个对象间的耦合,将多个对象间的交互集中到一个调停者对象上,使得对象间的关系更加清晰,代码更加易于维护。 以上设计模式在实际开发中都有广泛的应用,理解并合理使用...

    java的23种设计模式

    14. **调停者模式**(Mediator) - **模式名称**:调停者模式 - **问题**:多个对象之间的交互过于复杂。 - **解决方案**:引入一个中介对象来协调这些对象之间的交互。 - **效果**:降低了对象之间的耦合度,...

    设计模式精解-23种设计模式解析

    - **定义**: 调停者模式是一种行为型设计模式,它用一个中介对象来封装一系列的对象交互。 - **目的**: 降低对象间的耦合。 - **优点**: - 降低耦合度。 - 可以很容易地改变调停者的交互。 - **应用场景**: 当一组...

    python实现常用的23种设计模式:含源代码、详细文档说明

    一、创建型模式 1、工厂方法模式【Factory Method】 2、抽象工厂模式【Abstract Factory】 ...8、调停者模式【Mediator】 9、备忘录模式【Memento】 10、迭代器模式【Iterator】 11、解释器模式【Interpreter】

    java常用数据结构及算法集锦

    调停者模式 备忘录模式 解释器模式 迭代器模式 状态模式 责任链模式 访问者模式 结构与算法 基础概念 稀疏数组与二维数组 队列和栈结构 单向链表和双向链表 排序与查找算法 二叉树与多叉树 应用场景 RSA算法签名...

    深入浅出java设计模式(高清中文PDF)

    所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...

    C#23种设计模式_示例源代码及PDF

    调停者模式: 调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显 调停者模式 作用。 从而使他们可以松散偶合。 当某些对象之间的作用发生改变时, 不会立即影响其他 的 一些对象之间的作用。 ...

    设计模式简介

    行为型模式包括十一中设计模式:模板方法模式(TemplateMethod)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、职责链模式(ChainofResponsibility)、命令模式(Command)、访问者模式...

    Java中23种设计模式详解

    调停者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的内部表示。这种模式使得对象交互可以灵活地变化。 15. 备忘录模式(Memento) 备忘录模式在不破坏封装性的前提下,捕获一个对象的...

    阿里10年工作经验大牛设计模式金牌讲解(带案例)

    阿里10年工作经验大牛讲解设计模式(带案例) 设计模式综合案例 jdk中的设计模式 备忘录模式 策略模式 访问者模式 解释器模式 ...调停者模式 状态模式 多人联机射击游戏在实际开发中综合使用设计模式

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    design-patterns:设计模式

    设计模式之馋 参考资料 六大原则 ...调停者模式(调解员模式) 备忘录模式(memento pattern) 观察者模式(观察者模式) 状态模式 策略模式 模板方法模式(模板方法模式) 访问者模式(访客模式)

Global site tag (gtag.js) - Google Analytics