设计模式中介者模式

1.中介者模式的定义及使用场景
定义:
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。
使用场景:
当对象之间的交互操作很多且每个对象的行为操作都彼此依赖时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,可采用中介者模式,来解决紧耦合问题。该模式将对象之间的多对多关系变成一对多关系,中介者对象将系统从网状结构变成以调停者为中心的星形结构,达到降低系统的复杂性,提高可扩展的作用。

《设计模式中介者模式》 Paste_Image.png

2.中介者模式的优缺点

2.1优点

中介者的模式的优点就是减少类间的依赖,把原有的一对多的依赖变成一对一的依赖,同事类只依赖中介者,减少依赖,当然同时也降低了类间的耦合

2.2缺点

中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类约多,中介者的逻辑就越复杂

3.注意实现

中介者模式是一个非常好的封装模式,也是一个很容易被滥用的模式,一个对象依赖几个对象是再正常不过的事情,但是纯理论家就会要求使用中介者模式来封装这种依赖关系,这是非常危险的!使用中介者模式就必然会带来中介者的膨胀问题,这在一个项目中是很不恰当的。可以在如下的情况尝试使用中介者模式:

N个对象直接产生了相互的依赖关系(N>2)

对个对象有依赖关系,但是依赖的行为尚不确定或者有发送改变的可能,在这种情况下一般建议采用中介者模式,降低变更引起的风险扩散

产品开发。一个明显的例子就是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之间彼此不交互。
出处:http://huangjunbin.com/page/2/
    原文作者:GB_speak
    原文地址: https://www.jianshu.com/p/a8541922526f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞