中介者模式

概念

  说起中介者模式,就想起平时买房和租房的时候的中介,还有聊天室,中介者模式就和这些很像。我们靠一个中介者来处理类与类之间的交互关系。

角色

抽象中介者角色:定义了交互方式。
具体中介者角色:实现了交互方式。
抽象“对象类”:定义通用的操作。
具体“对象类”:实现抽象"对象"类。

上代码

  就模拟一下聊天室聊天的代码,这里聊天室就是一个中介者类,因为大家都可以在里面讲话。这个例子比较简单,我就没有写抽象中介者类

具体中介者类

  因为要处理对象间的关系,所以他必须持有各对象的引用。而我写的sayTox方法,其实可以统一成一个方法,但这样就需要添加if...else..判断了,所以这也暴露了中介者模式的缺点。

public class ChartRoom {
    
    private UserA userA;
    private UserB userB;
    
    public void setUserA(UserA userA) {
        this.userA = userA;
    }

    public void setUserB(UserB userB) {
        this.userB = userB;
    }

    public void sayToB(String msg){
        userB.getMsg(msg);
    }
    
    public void sayToA(String msg){
        userA.getMsg(msg);
    }
    
}
抽象 对象 类

  拥有发送消息和接收消息的方法


public interface User {
    
    /**
     * 发送消息
     */
    void say(ChartRoom chart);
    
    /**
     * 接收消息
     */
    void getMsg(String msg);
}

具体 对象 类
public class UserA implements User{

    @Override
    public void say(ChartRoom chart) {
        chart.sayToB("Hello I'm A");
    }

    @Override
    public void getMsg(String msg) {
        System.out.println("A got Msg:"+msg);
    }

}


public class UserB implements User {
    
    @Override
    public void say(ChartRoom chart) {
        chart.sayToA("hello I'm B");
    }

    @Override
    public void getMsg(String msg) {
        System.out.println("B got msg:"+msg);
    }

}

模拟的客户端类

public class MediumClient {
    public static void main(String[] args) {
        System.out.println("初始化聊天室");
        ChartRoom chartRoom = new ChartRoom();
        UserA userA = new UserA();
        UserB userB = new UserB();
        
        chartRoom.setUserA(userA);
        System.out.println("A 加入聊天室");
        chartRoom.setUserB(userB);
        System.out.println("B 加入聊天室");
        
        userA.say(chartRoom);
        userB.say(chartRoom);
    }
}
结果
The End

  其实看了上面的代码,中介者模式的优缺点也表现的很明显了。这里再说一下,年底要考

优点
  1、降低了类的复杂度,将一对多转化成了一对一。
  2、各个类之间的解耦。
  3、符合迪米特原则。

缺点
  中介者会十分十分庞大,毕竟处理都是在中介者里面弄的。

所以什么时候使用呢,当然是当类与类的交互变的复杂的时候了,把他们从1对多转化成1对1,看着就瞬间清爽了。

好了,over。

你可能感兴趣的:(中介者模式)