中介者模式:用一个中介对象来封装一系列的对象交互。

中介者使各对象不须要显式的相互引用,从而使其耦合松散。并且能够独立的改变它们之间的交互。

使用场合:中介者模式一般应用于一组对象以定义良好可是复杂的方式进行通信的场合。以及想定制一个分布在多个类中的行为,而不是想生成太多的子类的场合。

首先定义一个中介者接口IMediator

public interface IMediator {

    public void send(String message,Colleague colleague);
}

接着定义抽象同事类Colleague

public abstract class Colleague {

    protected IMediator mediator;

    public Colleague(IMediator mediator){
this.mediator=mediator;
}
}

接着定义详细的同事类继承Colleague 抽象同事类

public class ConcreteColleague1 extends Colleague{

    public ConcreteColleague1(IMediator mediator) {
super(mediator); } public void send(String message){
mediator.send(message, this);
} public void notify(String message){
System.out.println("同事1获得消息:"+message);
}
} public class ConcreteColleague2 extends Colleague{ public ConcreteColleague2(IMediator mediator) {
super(mediator); } public void send(String message){
mediator.send(message, this);
} public void notify(String message){
System.out.println("同事2获得消息:"+message);
}
}

然后定义一个详细的中介者对象ConcreteMediator继承IMediator

public class ConcreteMediator implements IMediator{

    private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2; public void setColleague1(ConcreteColleague1 colleague1){
this.colleague1=colleague1;
} public ConcreteColleague1 getColleague1(){
return colleague1;
} public void setColleague2(ConcreteColleague2 colleague2){
this.colleague2=colleague2;
} public ConcreteColleague2 getColleague2(){
return colleague2;
} @Override
public void send(String message, Colleague colleague) { if(colleague==colleague1){
colleague2.notify(message);
}
else{
colleague1.notify(message);
}
}
}

client代码

public static void main(String[] args) {
//中间者模式
ConcreteMediator mediator=new ConcreteMediator();
ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2=new ConcreteColleague2(mediator); mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2); colleague1.send("你好,中国");
colleague2.send("你好,美国");
}

设计模式之Mediator模式(笔记)的更多相关文章

  1. 设计模式--中介(Mediator)模式

    时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...

  2. 设计模式之Composite模式(笔记)

    组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...

  3. 设计模式:mediator模式

    目的:解决多组件之间的通信问题,使得组件之间的通信变得简单 核心:提供一个管理类,用来处理组件之间的通信,所有的组件只和管理类通信,组件彼此之间不在单独通信 例子: class Mediator { ...

  4. 《图解设计模式》读书笔记7-2 Mediator模式

    目录 Mediator模式简介 示例程序 示例程序类图 代码 Mediator模式角色和类图 角色 模式类图 思路拓展 简单化 角色复用 Mediator模式简介 Mediator模式即中介者模式,可 ...

  5. 设计模式---接口隔离模式之中介者模式(Mediator)

    一:概念 在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互.Mediator对象起到控制器的作用 二:动机 在软件构建的过程中, ...

  6. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  7. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选 ...

  8. 设计模式(17)--Mediator(中介者模式)行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以 ...

  9. Mediator模式(仲裁者设计模式)

    Mediator ? Mediator的意思是"仲裁者""中介者".一方面,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者.当仲裁者 ...

随机推荐

  1. 《你又怎么了我错了行了吧》【Beta】Scrum meeting 1

    第一天 日期:2019/6/24 前言: 第1次会议在女生宿舍召开 对前面的开发成果进行验收和测试,继续完善项目 1.1 今日完成任务情况以及明日任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 对 ...

  2. git 简单理解

    现在git这个版本控制大行其道,弄了半天大概理解了一下他的工作原理. 使用流程 1,安装git ,小乌龟,小乌龟汉化(在设置里面第一项,检查更新,下载中文包安装) 2,设置 小乌龟 ->git ...

  3. java中的接口中的方法

    题目如下:(多选题)请选择以下接口定义正确的方法() A:public static void main (String[] args); B:private void test(); C:publi ...

  4. node之版本号升级和管理

    如今非常多人预计和我一样项目中已经開始应用起nodeJS,而伴随着项目的需求,对nodejs版本号也有着各种需求.好了直接进入主题,如今node版本号管理网上有非常多方式.这里说两种: 第一种modu ...

  5. tensorfllow MNIST机器学习入门

    MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...

  6. javascript系列-class7.Date对象

    1.对象   什么是对象?       对象的类型是Object.   JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...   javaScript中万事万物皆对象   用官方 ...

  7. [jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)

    题目链接: https://jzoj.net/senior/#main/show/6087 题目: 题解: 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$ =$exp(\ ...

  8. [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)

    题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...

  9. 19.boost A*算法

    #include <iostream> #include <string> #include <utility> #include <vector> # ...

  10. C#调用Exe程序示例

    在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 ...