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

前言

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

定义

  • 定义:包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.将多对多相互作用转化为一对多的相互作用.
  • 优点:可以对依赖关系的类进行解耦使逻辑结构清晰
  • 使用场景:对象之间交互操作,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,来解决耦合问题.

UML类图

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

  • 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

你可能感兴趣的:(读书笔记-android基础,Android源码设计模式应用,android,读书笔记,设计模式,中介者模式)