Java设计模式之《调停者模式》及应用场景

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6518603.html

  调停者模式。

  我们想象一下这样的场景:一个系统内部通过许多的类互相之间相互调用来完成一系列的功能,这个系统内部的每个类都会存在至少一次的调用与被调用,多者数不胜数,这种情况下,一旦某个类发生问题,进行修改,无疑会影响到所有调用它的类,甚至它调用的类,可见这种情况下,类与类之间的耦合性极高(体现为太多的复杂的直接引用)。

  这正是调停者模式的主场,调停者犹如第三方中介一般,将所有的类与类之间的引用都导向调停者类,所有类的请求,一致发向调停者,由调停者再发向目标类,这样原本复杂的网状的类关系,变成了简单的星型类关系,调停者类位于核心,所有其他类位于外围,指向调停者。如此这般,类与类之间的直接调用耦合被解除(通过统一的第三方来发起调用),某个类发生问题,发生修改,也只会影响调停者,而不会直接影响到简介发起调用的那些类。

  下面举个生活中的实例:一个公司部门,有一个经理来充当调停者,其下的员工充当互相作用的类,这是一个很形象的实例。如果所有职员之间的互动都由职工之间直接进行,一旦某个员工不在,那么必须由此员工操作的事情便无法互动起来,或者某个员工被更换,员工之间不熟悉,也无法进行互动,这样,经理这个调停者的作用就来了,发起需求的员工将需求告诉经理,经理再找其他员工操作这个需求,明显的调停者模式。

  下面看看示例代码:

调停者接口:Mediator

1 /**
2  * 调停者接口
3  */
4 public interface Mediator {
5     void change(String message,ZhiYuan zhiyuan,String nname);
6 }

职工抽象类:ZhiYuan

 1 /**
 2  * 职员接口
 3  */
 4 public abstract class ZhiYuan {
 5     String name;
 6     private Mediator mediator;
 7     public ZhiYuan(Mediator mediator,String name){
 8         this.mediator = mediator;
 9         this.name = name;
10     }
11     //被调停者调用的方法
12     public void called(String message,String nname){
13         System.out.println(name + "接收到来自"+ nname + "的需求:" + message);
14     }
15     //调用调停者
16     public void call(String message,ZhiYuan zhiyuan,String nname){
17         System.out.println(nname + "发起需求:"+ message);
18         mediator.change(message,zhiyuan,nname);
19     }
20 }

具体的调停者:Jingli

 1 /**
 2  * 调停者:经理
 3  */
 4 public class Jingli implements Mediator {
 5     @Override
 6     public void change(String message,ZhiYuan zhiyuan,String nname) {
 7         System.out.println("经理收到" + nname + "的需求:" + message);
 8         System.out.println("经理将" + nname + "的需求发送给目标职员");
 9         zhiyuan.called(message,nname);
10     }
11 }

具体的职员:ZhiyuanA、ZhiyuanB、ZhiyuanC

 1 /**
 2  * 职员A
 3  */
 4 public class ZhiyuanA extends ZhiYuan {
 5     public ZhiyuanA(Mediator mediator, String name) {
 6         super(mediator, name);
 7     }
 8 }
 9
10 /**
11  * 职员B
12  */
13 public class ZhiyuanB extends ZhiYuan {
14     public ZhiyuanB(Mediator mediator, String name) {
15         super(mediator, name);
16     }
17 }
18
19 /**
20  * 职员C
21  */
22 public class ZhiyuanC extends ZhiYuan {
23     public ZhiyuanC(Mediator mediator, String name) {
24         super(mediator, name);
25     }
26 }

测试类:Clienter

 1 public class Clienter {
 2     public static void main(String[] args) {
 3         //分配职员与经理
 4         Mediator jingli = new Jingli();
 5         ZhiYuan zhiyuanA = new ZhiyuanA(jingli,"职员A");
 6         ZhiYuan zhiyuanB = new ZhiyuanB(jingli,"职员B");
 7         ZhiYuan zhiyuanC = new ZhiyuanC(jingli,"职员C");
 8         //职员A的需求
 9         String messageA = "这些资料需要B职员操作";
10         zhiyuanA.call(messageA,zhiyuanB,zhiyuanA.name);
11         //职员C的请求
12         String messageC = "这些资料需要B职员签名";
13         zhiyuanC.call(messageC, zhiyuanB,zhiyuanC.name);
14     }
15 }

执行结果:

职员A发起需求:这些资料需要B职员操作
经理收到职员A的需求:这些资料需要B职员操作
经理将职员A的需求发送给目标职员
职员B接收到来自职员A的需求:这些资料需要B职员操作
职员C发起需求:这些资料需要B职员签名
经理收到职员C的需求:这些资料需要B职员签名
经理将职员C的需求发送给目标职员
职员B接收到来自职员C的需求:这些资料需要B职员签名

  如上所列,职工A和职工C都需要请求职工B,但是假如他们不认识职工B,那么就将工作需求提交给经理,经理再将工作需求发送给职工B。

  使用调停者模式貌似要比原本的结构消耗时间,但是却将需求的发起者与执行者之间的强耦合进行了降低,极大的优化了系统内部的维护工作。

  调停者模式降低的是系统内部的耦合性,而外观模式降低的是系统之间的耦合性。

  调停者模式更加细化,针对的是系统内部类与类之间的强耦合的解除,外观模式则较为统筹,针对的是整个系统对外的耦合性解除,二者都都有屏蔽复杂性的作用。

时间: 2024-10-13 11:41:40

Java设计模式之《调停者模式》及应用场景的相关文章

JAVA设计模式之调停者模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述调停者(Mediator)模式的: 调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们可以较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用.从而保证这些相互作用可以彼此独立地变化. 为什么需要调停者 如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象.这

Java 设计模式 之 调停者模式

http://www.verejava.com/?id=16999137231072 package com.mediator.theory; public class TestMediator { public static void main(String[] args) { Mediator mediator=new MediatorImpl(); mediator.handle("rent"); mediator.handle("sale"); } } pa

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

Java设计模式之接口型模式总结

摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6508967.html 之前认真学习了Java设计模式中的四大接口型模式,分别为:适配器模式(Adapter).外观模式(Facade).合成模式(Composite).桥接模式(Bridge). 1.在此处再温习一下四种设计模式: (1)适配器模式: 我们能够访问的类中不存在我们要访问的内容时,就可以使用这个适配器模式,当然就类而言,其实不存在什么不能被访问,这里的不能访问都是人

Java设计模式之工厂方法模式(转) 实现是抽象工厂?

Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章]          一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色

java设计模式4--建造者模式(Builder)

本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 概述 当系统准备为用户提供一个内部结构复杂的对象时,就可以使用生成器模式,使用该模式可以逐步地构造对象,使得对象的创建更具弹性.生成器模式的关键是将一个包含有多个组件对象的创建分成若干个步骤,并将这些步骤封装在一个称作生成器的接口中. 适用性 1.当创建复杂

Java设计模式之结构型模式

结构型设计模式是从程序的结构上解决模块之间的耦合问题.包括以下七种模式: 适配器模式:可以将类的一个借口匹配另一个接口 组合模式:对象的组合 代理模式:一个简单的对象代替一个复杂的稍后会被调用的复杂对象 外观模式:一个类表示一个子系统 享元模式:用于共享对象,其中每个实例都不保存自己的状态.而是将状态保存在外部 桥接模式:将对象的接口与实现分离 装饰模式:动态给对象添加职责结构型设计模式是从程序的结构上解决模块之间的耦合问题 适配器模式: 原文链接:一个示例让你明白适配器模式 含义:将一个类的接

java设计模式之 装饰器模式

适AT java设计模式之 装饰器模式 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,动态给一个对象添提供了额外的功能. 我们通过下面的实例来演示装饰器模式的用法.模拟一个人从想吃饭.找饭店.享受美食.结束吃饭的过程 代码展示: 首先创建一个被修饰的接口 Eat package deco

Java设计模式之享元模式实例详解

本文实例讲述了Java设计模式之享元模式.分享给大家供大家参考,具体如下: 解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象.如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了.那么如果要是每个字母都共享一个对象,那么就大大节约了资源. 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweigh

折腾Java设计模式之中介者模式

博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 通俗点来讲就是提供一个中介平台,说到平台,那其实很容易联系到我们很熟悉的房地产中介.我们可以直接通过这个平台得到我们想要的信息,不用对象自身与其他对象交互. 买房子租房子就不需要去找房东,只需要在中介那里获取相应的×××信息.如下图那样,两方只