java 之 中介模式(大话设计模式)

中介模式,笔者使用比较多的是在线聊天,或者商家和客户在线沟通,正常我们首先想到的实现方式是

客户→商家;商家→客户,这样的模式就耦合了客户和商家的关系,我们不能够轻易的改动商家或者客户。

而中介模式的出现使得原型变成

客户→平台→商家;商家→平台→客户。这样商家类和客户类就不会耦合在一起。另外如果商家和客户发生冲突。

平台站在中间的立场,可以公平的解决问题

先看下类图

大话设计模式-类图

java 之 中介模式(大话设计模式)

在简单看下笔者的demo

/**
 * 抽象父类人
 */
public abstract class Person {

    private IMatchmaker matchmaker;

    public Person(IMatchmaker matchmaker) {
        this.matchmaker = matchmaker;
    }

    public void sendMessage(String message, Person person) {
        matchmaker.handleMessage(message, person);
    }

    public void receiveMessage(String message) {
        System.out.println(message);
    }
}
/**
 * 中介接口
 */
public interface IMatchmaker {

    public void handleMessage(String message, Person person);
}
/**
 * 男孩
 */
public class Boy extends Person{

    public Boy(IMatchmaker matchmaker) {
        super(matchmaker);
    }
}
/**
 * 女孩
 */
public class Girl extends Person{

    public Girl(IMatchmaker matchmaker) {
        super(matchmaker);
    }

}
/**
 * 具体媒婆
 */
public class WomanMatchmaker implements IMatchmaker{

    private Person person1;

    private Person person2;

    @Override
    public void handleMessage(String message, Person person) {
        if (person1.equals(person)) {
            person2.receiveMessage(message);
        } else {
            person1.receiveMessage(message);
        }
    }

    public Person getPerson1() {
        return person1;
    }

    public void setPerson1(Person person1) {
        this.person1 = person1;
    }

    public Person getPerson2() {
        return person2;
    }

    public void setPerson2(Person person2) {
        this.person2 = person2;
    }
}
/**
 * 客户端
 */
public class Test {

    public static void main(String[] args) {
        WomanMatchmaker matchmaker = new WomanMatchmaker();
        Person person1 = new Boy(matchmaker);
        Person person2 = new Girl(matchmaker);
        matchmaker.setPerson1(person1);
        matchmaker.setPerson2(person2);
        person1.sendMessage("男:我喜欢你", person1);
        person2.sendMessage("女:我知道", person2);
    }
}

输出结果:

男:我喜欢你
女:我知道

以上是笔者对中介模式的理解,希望能帮助学习中介模式的小伙伴。

相关推荐