首页 > 学院 > 开发设计 > 正文

设计模式-中介者模式

2019-11-11 05:05:37
字体:
来源:转载
供稿:网友

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之间彼此不交互。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表