Behavioral模式之Mediator模式
来源:互联网 发布:淘宝网家居拖鞋 编辑:程序博客网 时间:2024/05/20 20:03
1.意图
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
2.别名
无
3.动机
面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。
4.适用性
以下情况使用Mediator模式:
- 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
- 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
- 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
5.结构
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图:
User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用中介者模式,则需要二者相互持有引用,这样二者的耦合度很高,为了解耦,引入了Mediator类,提供统一接口,MyMediator为其实现类,里面持有User1和User2的实例,用来实现对User1和User2的控制。这样User1和User2两个对象相互独立,他们只需要保持好和Mediator之间的关系就行,剩下的全由MyMediator类来维护!
6.代码示例
实现代码:
public interface Mediator { public void createMediator(); public void workAll();}
中介类
public class MyMediator implements Mediator { private User user1; private User user2; public User getUser1() { return user1; } public User getUser2() { return user2; } @Override public void createMediator() { user1 = new User1(this); user2 = new User2(this); } @Override public void workAll() { user1.work(); user2.work(); }}user类
public abstract class User {
private Mediator mediator;public Mediator getMediator(){ return mediator;}public User(Mediator mediator) { this.mediator = mediator;}public abstract void work();
}
public class User1 extends User {
public User1(Mediator mediator){ super(mediator);}@Overridepublic void work() { System.out.println("user1 exe!");}
}
public class User2 extends User {
public User2(Mediator mediator){ super(mediator);}@Overridepublic void work() { System.out.println("user2 exe!");}
}
测试类:
public class Test { public static void main(String[] args) { Mediator mediator = new MyMediator(); mediator.createMediator(); mediator.workAll(); }}
输出:
user1 exe!
user2 exe!
7.相关模式
- Facade与中介者的不同之处在于它是对一个对象子系统进行抽象,从而提供了一个更为方便的接口。它的协议是单向的,即Facade对象对这个子系统类提出请求,但反之则不行。相反,Mediator提供了个Colleague对象不支持或不能支持的协作行为,而且协议是多向的。
- Colleague可使用Observer模式与Mediator通信。
引用:
http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm
http://item.jd.com/10057319.html
http://blog.csdn.net/zhangerqing/article/details/8239539
- Behavioral模式之Mediator模式
- C++实现Behavioral - Mediator模式
- C++实现Behavioral - Mediator模式
- Behavioral模式之Strategy模式
- Behavioral模式之Observer模式
- Behavioral模式之Iterator模式
- Behavioral模式之Command模式
- Behavioral模式之Memento模式
- Behavioral模式之State模式
- Behavioral模式之Visitor模式
- Behavioral模式之Interpreter模式
- 设计模式之Mediator
- 设计模式之 mediator
- Behavioral模式之template Method模式
- Behavioral模式之Chain of Responsibility模式
- 设计模式之mediator模式
- 设计模式之Mediator模式
- 行为模式之Mediator模式
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- GD库函数学习【笔记】
- vs2010修改包含目录,库目录以及依赖库
- Reverse Linked List II
- 【Android】ActionBar的使用(1)
- Behavioral模式之Mediator模式
- L and l
- adb操作sqlite3数据库
- hdu 1083 Courses
- 旧博客(看那时稚嫩的我。。。)
- 你遇到过最NB开发项目”有奖征文活动
- java.util.properties使用方法
- IO流知识点汇总
- 如何让 Finder 显示隐藏文件和文件夹