UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式
1.定义
用一个中介者对象封装一系列的对象交互,中介者可以使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
2.中介者模式UML图
角色介绍
- Mediator 抽象中介者角色,定义统一的接口,用于各同时角色之间的交互
- ConcreteMediator 具体中介者角色,具体中介者角色通过协调同事角色实现交互,因此,必须持有同事角色的引用。
- Colleague 同事角色,每一个同事角色,都需要直到中介者角色,并且不同同事角色之间的交互通信,需要通过中介者角色进行。每个同事者角色,都有两种行为,一种是自发行为,一种是依赖方法。自发行为表示不需要中介者角色可以自己完成相应逻辑的方法。依赖方法是指必须通过中介者才能完成的方法。
3.简单实现
3.1抽象中介者角色
public abstract class Mediator {
private ConcreteColleague1 concreteColleague1;
private ConcreteColleague2 concreteColleague2;
public ConcreteColleague1 getConcreteColleague1() {
return concreteColleague1;
}
public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
this.concreteColleague1 = concreteColleague1;
}
public ConcreteColleague2 getConcreteColleague2() {
return concreteColleague2;
}
public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
this.concreteColleague2 = concreteColleague2;
}
public abstract void method1();
public abstract void method2();
}
3.2具体中介者角色
public class ConcreteMediator extends Mediator {
@Override
public void method1() {
super.getConcreteColleague1().doSelf();
super.getConcreteColleague2().doSelf();
}
@Override
public void method2() {
super.getConcreteColleague1().doSelf();
super.getConcreteColleague2().doSelf();
}
}
3.3同事角色
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}
3.4具体同事角色
public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void doSelf(){
/**
* 可以自己完成的操作
*/
System.out.println("具体同时角色1的自己方法————");
}
public void doDep(){
super.mediator.method1();
}
}
public class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void doSelf(){
/**
* 可以自己完成的操作
*/
System.out.println("具体同时角色2的自己方法————");
}
public void doDep(){
super.mediator.method2();
}
}
3.5客户端调用
public class MyClass {
public static void main(String args[]) {
Mediator mediator=new ConcreteMediator();
ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);
mediator.setConcreteColleague1(colleague1);
mediator.setConcreteColleague2(colleague2);
colleague1.doDep();
}
}
打印结果
具体同时角色1的自己方法————
具体同时角色2的自己方法————
如例子中所写,具体同事角色继承自同事角色抽象类,同事角色中传入中介者角色进行初始化,当调用具体同事角色当相应方法时,通过调用中介角色当方法,完成不同具体同事角色间当通信。
4.总结
优点
- 中介者模式优点就是减少了类间当依赖,同时降低类类间当耦合
缺点
- 中介者模式将原来一对多模式改为了中介者和同事类的依赖,同事类越多的时候,中介者的逻辑就会越复杂。。
在面向对象编程中,一个类必然会和多个类有联系,当这种一对多的联系过于复杂的时候,可以考虑使用中介者模式来进行解耦,但是不复杂的时候,使用中介者模式,反而会看起来更麻烦。。。具体程度看具体情况了