今天想和大家讨论下中介者模式,中介者模式是啥捏?设计模式有三大类,一类是创建型模式,第二类是行为型模式,最后一类是结构型模式,中介者模式属于哪一种呢?看完本篇文章,你就懂啦!
那什么是中介者模式,它适合什么场景,如何实现,有哪些优缺点?听洪爵一一道来。
中介者模式是用来降低对象和对象之间通信的复杂性,提供一个中介类来给大家进行交互。啥意思?最初的时候,人们想要以物换物,都是通过点对点的进行交易,比如说A今天找到B,想用一个牛头换一个B的羊头。慢慢的,随着时代的进步,逐步演化成了一个固定地方进行交易,大家想要交易换取其他伙伴物件的可以来到一个共同的地方,效率高,而且好维护。
中介者模式在很多场景都有应用,比如说聊天室,像QQ,Wechat等,一个群组就是一个中介者对象,提供一个场所供大家交换信息;WTO,联合国,世界卫生组织都是这样的产物。
很明显了,中介者模式是属于行为型模式,松耦合,这类模式更关注对象之间的通信。
那如何做呢?我们拿聊天室举一个例子,首先我们需要有一个中介类,一个大家可以交互的场所WeChatRoom,第二个需要有参与者RoomUser,紧接着就是实现RoomUser之间如何进行通信了。
类图:
具体代码实现:
public class WeChatRoom {
public static Map<RoomUser, String> userMappingGroupChat = new ConcurrentHashMap<>();
public static void printMessage(RoomUser roomUser, String message) {
String groupChart = userMappingGroupChat.get(roomUser);
if(Objects.isNull(groupChart)) {
return;
}
System.out.println(new Date().toString() + " " + roomUser.getName() + "向" + groupChart + "发送一条消息: " + message);
}
}
public class RoomUser {
private String name;
public RoomUser(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sendMessage(String message) {
WeChatRoom.printMessage(this, message);
}
}
public class Client {
public static void main(String[] args) {
RoomUser baidu = new RoomUser("baidu");
RoomUser tenCent = new RoomUser("tenCent");
RoomUser google = new RoomUser("google");
WeChatRoom.userMappingGroupChat.put(baidu, "群聊1");
WeChatRoom.userMappingGroupChat.put(tenCent, "群聊1");
WeChatRoom.userMappingGroupChat.put(google, "群聊2");
baidu.sendMessage("hello everybody!");
tenCent.sendMessage("i can hear you clearly");
google.sendMessage("i can protobuf!!!");
}
}
/*
Mon Oct 11 23:48:20 CST 2021 baidu向群聊1发送一条消息: hello everybody!
Mon Oct 11 23:48:20 CST 2021 tenCent向群聊1发送一条消息: i can hear you clearly
Mon Oct 11 23:48:20 CST 2021 google向群聊2发送一条消息: i can protobuf!!!
*/
中介者模式的优点降低了类的复杂度,各个类之间实现了解耦。
中介者模式可能很多人没有听过,因为这是2018年才公布的计算机科学技术名词呀!
好了,本章节就到这里了,希望对你有所帮助! 愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!