Java设计模式17:中介者模式(Mediator)

中介者模式

意图

用一个中介对象来封装一些列的对象交互。中介者是哥哥对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互

适用性

1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构婚恋且难以理解

2、一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象

3、定制一个分布在多个类中的行为,又不想生成太多子类

温馨提示

MVC模式,其中C就是M和V的中介者,仔细思考一下。

结构

这里写图片描述

Mediator

中介者定义一个接口用于与Colleague通信

ConcreteMedaitor

具体中介者通过协调各个Colleague对象协作行为

了解并维护他的各个Colleague

Colleague class

每一个同事类都知道他的中介者对象

每一个同事类在需要与其他同事通信时,与他的中介者通信

一个图介绍中介者模式

一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定
这里写图片描述

如果引入中介者模式,那么同事类之间的关系将变为星型结构,通过中介者来处理同事之间的关系
这里写图片描述

实现

package mediator;

/**
 * @Author fitz.bai
 * @Date 2018/9/5 21:16
 * 中介者
 */
public class ChatRoom {
    public static void showMessage(User user, String message) {
        System.out.println( user.getName() + "says that" + message);
    }
}
package mediator;

/**
 * @Author fitz.bai
 * @Date 2018/9/5 21:18
 */
public class User {

    private String name;

    public User(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sendMessage(String message) {
        ChatRoom.showMessage(this, message);

    }
}
package mediator;

/**
 * @Author fitz.bai
 * @Date 2018/9/5 21:15
 */
public class Client {
    public static void main(String[] args) {
        User axe = new User("斧王");
        User antiMagic = new User("敌法师");

        axe.sendMessage("Hooooo! 斧王来了!");
        antiMagic.sendMessage("aaa! 消灭魔法!");
    }
}
/**
斧王says thatHooooo! 斧王来了!
敌法师says thataaa! 消灭魔法!
*/

优点

1、减少子类的生成

2、他将各个Colleague解耦

3、简化了对象协议

4、他对对象如何协作进行了抽象

5、他使控制集中化

缺点

中介者类中包含了大量同事之间的交互细节,会导致其内容逻辑非常复杂,使得系统难以维护

猜你喜欢

转载自blog.csdn.net/qq_22798455/article/details/82431106