- 浏览: 327804 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (262)
- Java (20)
- 设计模式 (16)
- Oracle (13)
- Struts (1)
- 问题解决 (9)
- ibatis (2)
- Maven (5)
- Git (2)
- 实现原理 (6)
- 敏捷开发 (22)
- Spring (4)
- 算法 (8)
- MySQL (2)
- Java工具箱 (17)
- jQuery (1)
- 英语学习 (8)
- 杂谈 (15)
- 多线程 (15)
- Java解惑 (7)
- Linux (1)
- 重构36计 (6)
- 网络 (4)
- PHP (1)
- Socket (6)
- 面试 (1)
- JVM (14)
- 历史与故事 (5)
- 报表 (4)
- CMS (3)
- Windows (1)
- nginx (5)
- 架构设计 (7)
- RubyOnRails (2)
- Hadoop (8)
- Go (7)
- JS (1)
- Web (1)
- 项目实例 (5)
- ubuntu (4)
最新评论
-
jacking124:
按照你这个配置以后提示这个异常?Exception occur ...
Go语言学习:开发环境搭建及Hello World -
焦志广:
有请看http://jiaozhiguang-126-com. ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
w156445045:
Hadoop 有没windows环境下的配置呢,
谢谢。非常感 ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
xiangxm:
学习了。
Java 解惑知多少六 -
焦志广:
xhh_lite 写道怎么少了一个类?恩?不少啊,少那个类啊; ...
易学设计模式四 命令模式(Commond)
调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。
为什么需要调停者
如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象。这些同事对象通过彼此的相互作用形成系统的行为。从图中可以看出,几乎每一个对象都需要与其他的对象发生相互作用,而这种相互作用表现为一个对象与另一个对象的直接耦合。这就是过度耦合的系统。
通过引入调停者对象(Mediator),可以将系统的网状结构变成以中介者为中心的星形结构,如下图所示。在这个星形结构中,同事对象不再通过直接的联系与另一个对象发生相互作用;相反的,它通过调停者对象与另一个对象发生相互作用。调停者对象的存在保证了对象结构上的稳定,也就是说,系统的结构不会因为新对象的引入造成大量的修改工作。
一个好的面向对象的设计可以使对象之间增加协作性(Collaboration),减少耦合度(Couping)。一个深思熟虑的设计会把一个系统分解为一群相互协作的同事对象,然后给每一个同事对象以独特的责任,恰当的配置它们之间的协作关系,使它们可以在一起工作。
抽象调停者(Mediator)角色
具体调停者(ConcreteMediator)角色
抽象同事类(Colleague)角色
具体同事类(ConcreteColleague)角色
输出结果:
您正在观看的是:One Piece
画外音:海贼王我当定了
参考:http://blog.csdn.net/m13666368773/article/details/7712213
为什么需要调停者
如下图所示,这个示意图中有大量的对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象。这些同事对象通过彼此的相互作用形成系统的行为。从图中可以看出,几乎每一个对象都需要与其他的对象发生相互作用,而这种相互作用表现为一个对象与另一个对象的直接耦合。这就是过度耦合的系统。
通过引入调停者对象(Mediator),可以将系统的网状结构变成以中介者为中心的星形结构,如下图所示。在这个星形结构中,同事对象不再通过直接的联系与另一个对象发生相互作用;相反的,它通过调停者对象与另一个对象发生相互作用。调停者对象的存在保证了对象结构上的稳定,也就是说,系统的结构不会因为新对象的引入造成大量的修改工作。
一个好的面向对象的设计可以使对象之间增加协作性(Collaboration),减少耦合度(Couping)。一个深思熟虑的设计会把一个系统分解为一群相互协作的同事对象,然后给每一个同事对象以独特的责任,恰当的配置它们之间的协作关系,使它们可以在一起工作。
抽象调停者(Mediator)角色
具体调停者(ConcreteMediator)角色
抽象同事类(Colleague)角色
具体同事类(ConcreteColleague)角色
public abstract class Colleague { private Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public Mediator getMediator() { return mediator; } }
public class CDDriver extends Colleague { // 光驱读取出来的数据 private String data = ""; public CDDriver(Mediator mediator) { super(mediator); } /** * 获取光盘读取出来的数据 */ public String getData() { return data; } /** * 读取光盘 */ public void readCD() { // 逗号前是视频显示的数据,逗号后是声音 this.data = "One Piece,海贼王我当定了"; // 通知主板,自己的状态发生了改变 this.getMediator().changed(this); } }
package com.jiaozg.mediator; public class CPU extends Colleague { public CPU(Mediator mediator) { super(mediator); } // 分解出来的视频数据 private String videoData = ""; // 分解出来的声音数据 private String soundData = ""; /** * 获取分解出来的视频数据 */ public String getVideoData() { return videoData; } /** * 获取分解出来的声音数据 */ public String getSoundData() { return soundData; } /** * 处理数据,把数据分成音频和视频的数据 */ public void executeData(String data) { // 把数据分解开,前面是视频数据,后面是音频数据 String [] array = data.split(","); this.videoData = array[0]; this.soundData = array[1]; this.getMediator().changed(this); } }
package com.jiaozg.mediator; public class VideoCard extends Colleague { public VideoCard(Mediator mediator) { super(mediator); } /** * 显示视频数据 */ public void showData(String data) { System.out.println("您正在观看的是:" + data); } }
package com.jiaozg.mediator; public class SoundCard extends Colleague { public SoundCard(Mediator mediator) { super(mediator); } public void soundData(String data) { System.out.println("画外音:" + data); } }
package com.jiaozg.mediator; public interface Mediator { public void changed(Colleague c); }
package com.jiaozg.mediator; public class MainBoard implements Mediator { private CDDriver cdDriver = null; private CPU cpu = null; private VideoCard videoCard = null; private SoundCard soundCard = null; public void changed(Colleague c) { if(c instanceof CDDriver) { this.openCDDriverReadData(cdDriver); } else if(c instanceof CPU) { this.openCPU(cpu); } } private void openCDDriverReadData(CDDriver cd) { // 把这些数据传递给CPU进行处理 cpu.executeData(cd.getData()); } public void openCPU(CPU cpu) { // 把这些数据传递给显卡和声卡展示出来 videoCard.showData(cpu.getVideoData()); soundCard.soundData(cpu.getSoundData()); } public void setCdDriver(CDDriver cdDriver) { this.cdDriver = cdDriver; } public void setCpu(CPU cpu) { this.cpu = cpu; } public void setVideoCard(VideoCard videoCard) { this.videoCard = videoCard; } public void setSoundCard(SoundCard soundCard) { this.soundCard = soundCard; } }
package com.jiaozg.mediator; public class Client { public static void main(String[] args) { // 创建调停者——主板 MainBoard mediator = new MainBoard(); // 创建同事类 CDDriver cd = new CDDriver(mediator); CPU cpu = new CPU(mediator); VideoCard vc = new VideoCard(mediator); SoundCard sc = new SoundCard(mediator); // 让调停者知道所有同事 mediator.setCdDriver(cd); mediator.setCpu(cpu); mediator.setVideoCard(vc); mediator.setSoundCard(sc); // 开始看电影,把光盘放入光驱,光驱开始读盘 cd.readCD(); } }
输出结果:
您正在观看的是:One Piece
画外音:海贼王我当定了
参考:http://blog.csdn.net/m13666368773/article/details/7712213
发表评论
-
Java 23种设计模式的有趣见解
2012-10-19 09:52 821创建型模式 1、FACTORY—追MM少不了请吃饭了,麦当 ... -
易学设计模式15 解释器模式(Interpreter)
2012-09-13 16:47 813解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义 ... -
易学设计模式13 状态模式(State)
2012-09-08 10:23 895状态模式(State Pattern)是设计模式的一种,属于行 ... -
易学设计模式11 观察者(Observer)
2012-09-06 13:36 969Observer模式是行为模式之一,它的作用是当一个对象的状态 ... -
易学设计模式十 单例序列键生成器
2012-09-04 21:40 848数据库有很多种,例如Oracle,DB2,Sybase,MyS ... -
易学设计模式九 单例模式(Singleton)
2012-09-03 21:41 830单例模式确保某一个类只有一个实例,并且自行实例化向整个系统提供 ... -
易学设计模式八 工厂方法(Factory Method)
2012-09-03 20:57 898工厂方法模式的用意是定义一个创建产品对象的工厂,将实际的创建工 ... -
易学设计模式七 简单工厂(Simple Factory)
2012-09-02 19:45 851简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ... -
易学设计模式六 代理模式(Proxy)
2012-08-30 23:16 803代理模式(Proxy)为另一个对象提供一个替身或占位符以控制对 ... -
易学设计模式五 建造模式(Builder)
2012-08-30 21:34 804遇到多个构造器参数(Constructor Parameter ... -
易学设计模式四 命令模式(Commond)
2012-08-28 16:43 2027命令模式定义 将一个请求封装为一个对象,从而使 ... -
易学设计模式三 装饰模式(Decorator)
2012-08-26 22:31 1163装饰者模式 Decorator模式(别名Wrapper):动态 ... -
易学设计模式二 组合模式(Composite)
2012-08-21 16:02 1076组合模式 将对象组合成树形结构以表示"部分-整体& ... -
易学设计模式一 模板 方法(Template Method)
2012-08-19 22:16 745模版方法:抽象类实现部分逻辑,声明一些抽象方法迫使子类实现剩余 ... -
图说设计模式 (一)Strategy
2012-07-27 11:52 1151很久很久以前, 野鸭(MallardDuck)和 红头鸭(Re ...
相关推荐
3. **行为型模式**:行为型模式处理对象间的行为分配,例如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式...
**中介者模式(Mediator)详解** 在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,其中中介者模式是结构型设计模式的一种。它的主要目标是降低对象之间的耦合度,使得对象之间的关系更加清晰,...
调停者模式涉及的角色包括抽象调停者(Mediator)、具体调停者(Concrete Mediator)、抽象同事类(Colleague)和具体同事对象(Concrete Colleague)。抽象调停者定义了同事对象与调停者之间的接口;具体调停者实现...
第23章 左右逢源:调停者模式 (Mediator) 第24章 白纸黑字:备忘录模式 (Memento) 第25章 周而复始:迭代器模式 (Iterator) 第26章 望文生义:解释器模式 (Interpreter) 第27章 无招胜有招:如何在设计中应用设计...
**设计模式之中介者模式(Mediator Pattern)** 在软件工程中,设计模式是一种解决常见问题的经验总结,它提供了一种可复用的解决方案。中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过...
中介者模式的完整代码。 程序默认使用vs开发。其他开发工具可能需要做少许调整。
**中介者模式(Mediator Pattern)** 中介者模式是一种行为设计模式,它的主要目标是减少对象之间的耦合性,通过引入一个中介对象来协调多个对象之间的交互。在传统的多对象交互场景中,对象之间可能存在复杂的依赖...
调停者模式是一种设计模式,属于对象的行为模式,其主要目的是降低对象之间的耦合度,使得对象之间的交互更加灵活且易于管理。在Java中,调停者模式通过引入一个中介对象,也就是调停者,来协调多个对象之间的交互,...
Mediator模式是一种行为设计模式,它定义了一个用来封装一系列对象相互作用的接口,使得这些对象不必显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。这种模式在软件开发中常用于简化对象间的...
这是一个运用了中介者设计模式的登录对话框练习题。 该案例改编自结城浩《设计模式-java语言中的应用》一书。 This is a program about a login dialog, wich try to illustrate the design pattern of Mediator. ...
1. **Mediator(中介者)**: 这是模式的核心,定义了各个同事对象之间交互的接口。Mediator抽象类通常包含一组用于与同事对象交互的方法。 2. **Concrete Mediator(具体中介者)**: 实现Mediator接口,负责协调各个...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: ...设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
### C++设计模式之Mediator(中介者)详解 #### 一、引言 在软件开发过程中,随着系统的复杂度逐渐增加,各个组件之间的交互变得越来越频繁,这不仅增加了系统的耦合度,还使得系统维护变得困难重重。为了解决这一...
标题和描述均提到了"C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式",这明确指向了一个特定的设计模式——中介者模式(Mediator Pattern),并且是在C#语言环境下的应用。下面将详细阐述这一设计...
3. 行为型模式:这类模式主要关注对象之间的交互和职责分配,包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘...
由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、Decorator模式、Flyweight模式、Proxy模式、Chain ...
然后,集中介绍了很多流行的设计模式在JavaScript中的应用,包括Module(模块)模式、Observer(观察者)模式、Facade(外观)模式和Mediator(中介者)模式;最后,还探讨了模块化的JavaScript模式、jQuery及其插件...
C#面向对象设计模式 (行为型模式) Mediator 中介者模式 视频讲座下载