设计模式-中介者模式
来源:互联网 发布:用ps做淘宝店长图 编辑:程序博客网 时间:2024/06/02 07:34
1.中介者模式的定义及使用场景
定义:
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。使用场景:
当对象之间的交互操作很多且每个对象的行为操作都彼此依赖时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,可采用中介者模式,来解决紧耦合问题。该模式将对象之间的多对多关系变成一对多关系,中介者对象将系统从网状结构变成以调停者为中心的星形结构,达到降低系统的复杂性,提高可扩展的作用。
2.中介者模式的优缺点
2.1优点
中介者的模式的优点就是减少类间的依赖,把原有的一对多的依赖变成一对一的依赖,同事类只依赖中介者,减少依赖,当然同时也降低了类间的耦合2.2缺点
中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类约多,中介者的逻辑就越复杂3.注意实现
中介者模式是一个非常好的封装模式,也是一个很容易被滥用的模式,一个对象依赖几个对象是再正常不过的事情,但是纯理论家就会要求使用中介者模式来封装这种依赖关系,这是非常危险的!使用中介者模式就必然会带来中介者的膨胀问题,这在一个项目中是很不恰当的。可以在如下的情况尝试使用中介者模式:1)N个对象直接产生了相互的依赖关系(N>2)
2)对个对象有依赖关系,但是依赖的行为尚不确定或者有发送改变的可能,在这种情况下一般建议采用中介者模式,降低变更引起的风险扩散
3)产品开发。一个明显的例子就是MVC框架,把中介者模式应用到产品中,可以提升产品的性能扩展性,但是对于项目开发就未必,因为项目是以交付投产为目标,而产品是以稳定、高效、扩展为宗旨。
4.中介者模式的实现方式
public abstract class Colleague { Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void action();}
public class ConcreteColleagueA extends Colleague { public ConcreteColleagueA(Mediator mediator) { super(mediator); } @Override public void action() { System.out.println("ColleagueA do action!"); } public void doPrivateA() { System.out.println("ColleagueA do private!"); }}
public class ConcreteColleagueB extends Colleague { public ConcreteColleagueB(Mediator mediator) { super(mediator); } @Override public void action() { System.out.println("ColleagueB do action!"); } public void doPrivateB() { System.out.println("ColleagueB do private!"); }}
public abstract class Mediator { protected ConcreteColleagueA concreteColleagueA; protected ConcreteColleagueB concreteColleagueB; public abstract void method(); public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) { this.concreteColleagueA = concreteColleagueA; } public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) { this.concreteColleagueB = concreteColleagueB; }}
public class ConcreteMediator extends Mediator { @Override public void method() { concreteColleagueA.action(); concreteColleagueB.action(); concreteColleagueA.doPrivateA(); concreteColleagueB.doPrivateB(); }}
5.中介者模式在Android中的实际应用
Android的Activity实际就是一个中介者模式,形形式式的View交互都在Activity中统一执行,View之间彼此不交互。 2 0
- 【设计模式】中介者
- 中介者设计模式
- 设计模式-中介者
- 设计模式-中介者
- [设计]中介者模式
- 设计模式 中介者模式
- 设计模式-中介者模式
- 设计模式 - 中介者模式
- 设计模式-中介者模式
- 设计模式:中介者模式
- 设计模式--中介者模式
- 设计模式-中介者模式
- 设计模式--中介者模式
- 设计模式-中介者模式
- 设计模式-中介者模式
- 设计模式-中介者模式
- 【设计模式】中介者模式
- 设计模式:中介者模式
- org.apache.commons.lang.StringUtils源码
- Python自动化面试必备 之 你真明白装饰器么?
- Android 系统架构
- ssh公私钥正确的情况下免密登录失败原因
- python连接sql server并执行查询操作
- 设计模式-中介者模式
- Plugin with id 'me.tatarka.retrolambda' not found.
- C# ??合并运算符
- Android开发环境搭建
- cmake 交叉编译
- 三个盒子选一个
- C++排序之直接插入排序法
- App在5.0以下出现NoClassDefFoundError
- 蓝桥-图4-linkedlist广度优先搜索