您的位置:首页 > 移动开发 > Android开发

《Android源码设计模式》读书笔记 (17) 第17章 中介者模式

2016-02-21 23:31 423 查看

前言

中介者模式面向的是多类对象

定义

定义:包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.将多对多相互作用转化为一对多的相互作用.

优点:可以对依赖关系的类进行解耦使逻辑结构清晰

使用场景:对象之间交互操作,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,来解决耦合问题.

UML类图



Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类方式实现.

/**
* 抽象中介者
* @author max
*
*/
public abstract class Mediator {
public ConcreteColleagueA colleagueA;
public ConcreteColleagueB colleagueB;
public void setColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}

/**
* 抽象终结方法\子类实现
*/
public abstract void method();
}


ConcreteMediator:具体中介者角色,从具体的同事对象接收消息,向具体的同事对象发出消息

/**
* 具体中介者对象
* @author max
*
*/
public class ConcreteMediator extends Mediator {

@Override
public void method() {
colleagueA.action();
colleagueB.action();
}

}


Colleague:抽象同事类角色,定义了中介者对象接口

/**
* 抽象同事
* @author max
*
*/
public abstract class Colleague {
//中介者对象
public Mediator mediator;

public Colleague(Mediator mediator) {
super();
this.mediator = mediator;
}

/**
* 同事角色的具体行为,由子类实现
*/
public abstract void action();

}


ConcreteColloeague:具体同事类角色,继承于抽象同事类.

/**
* 具体同事A
* @author max
*
*/
public class ConcreteColleagueA extends Colleague {

public ConcreteColleagueA(Mediator mediator) {
super(mediator);
}

@Override
public void action() {
//将信息递交给中介者处理
}

}


实现步骤

书上提供了一个电脑主板充当中介者,其他两个模块通过主板进行通信过程的案例

其实总结起来就是:

1.分别初始化Mediator和Colleague抽象类,

2.在具体Mediator类,实现各个Colleague子类的交互.

源码下载

这里就不贴第二个书上的案例了,有兴趣的同学可以直接看书或者下载源码demo.其实感觉中介者模式,有点像以前数学学过的把各个模块错中复杂的相互关系,全部归纳到与公共common类的关系也就是中介者.就实现模块间解耦了.

点击下载源码http://download.csdn.net/detail/qq_28690547/9438586
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息