作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。
支持作者: 点赞、关注、留言~
大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案。大聪明本着“独乐乐不如众乐乐”的宗旨与大家分享一下设计模式的学习心得。
中介模式 什么是中介模式在讲中介模式之前,我们先来看一下它的定义
中介者(Mediator)模式,定义了一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。它降低了多个对象和类之间的通信复杂性,使代码易于维护。中介者模式属于行为型模式。
中介模式其实很好理解,而且生活中就有许多明显的例子,最明显的一个例子就是房产中介。当我们来到一个陌生的城市时,我们需要租一个房子落脚,但是由于我们人生地不熟,所以我们想租到一个合适的房子就要依赖房产中介了;如果我们手里有闲置的房屋需要出租,由于我们所掌握的人脉有限,房屋并不能很快的出租出去,所以我们也需要找到房屋中介来帮助我们找到一个合适的租客。在这个例子中,房屋中介就帮助租客和房东实现了解耦,租客和房东只需要找到房屋中介并提出各自的要求,其他的就可以让房屋中介来帮我们解决了。我们在开发应用软件的时候,也会遇到很多类似的例子,比如在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;还有大家常用微信聊天,微信服务器就是微信聊天的中介者。所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。
中介模式的实现接下来我们就通过微信聊天的例子来简单的实现一下中介模式
创建聊天室(中介)
import java.util.Date;
public class ChatRoom {
public static void showMessage(User user, String message){
System.out.println(new Date().toString()
+ " [" + user.getName() +"] : " + message);
}
}
创建聊天用户类
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name){
this.name = name;
}
public void sendMessage(String message){
ChatRoom.showMessage(this,message);
}
}
使用 User 对象来让用户间通信
public class Test {
public static void main(String[] args) {
User user1 = new User("张三");
User user2 = new User("李四");
user1.sendMessage("哈喽,我是张三,你叫什么名字?");
user2.sendMessage("你好,我叫李四~");
}
}
代码运行结果
中介模式的总结看到这里,可能有些小伙伴会想到我们之前讲到的代理模式和外观模式,感觉这中介模式和外观模式与代理模式比较相似,但是我们仔细对比一下就可以发现他们的区别
⚔ 中介者模式 PK 外观模式 ⚔
- 外观模式是结构型模式,中介者模式是行为型模式。
- 外观模式是对子系统提供统一的接口,中介者模式是用一个中介对象来封装一系列同事对象的交互行为。
- 外观模式所有的请求处理都委托给子系统完成,而中介者模式则由中心协调同事类和中心本身共同完成业务
⚔ 中介者模式 PK 代理模式 ⚔
- 代理模式是一对一,一个代理只能代表一个对象;中介者模式则是多对多,中介者的功能多样,客户也可以多个(房产中介要是只服务一个租客和一个房东的话,估计他们就该吃不上饭了)。
- 代理模式只能代理一方,如果 X 是 A 的代理,那么 C 可以通过 X 访问 A,但是 A 不能通过 X 访问 C;而中介者模式则是互通的,即 A 可以通过中介访问 B,B 也可以通过中介访问 A(即租客可以通过房产中介联系房东,房东也可以通过房产中介联系租客)。
最后我们总结一下中介模式的优点与缺点
优点
中介模式将对象间的一对多关联转变为一对一的关联,让各个类之间各司其职,降低了对象之间的耦合性,提高系统的灵活性,使得系统易于维护和扩展,使得对象易于独立地被复用。
缺点
小结諾 中介者模式将原本多个对象之间的依赖变成了中介者和多个对象的依赖关系。当对象越多时,中介者就会越臃肿,也就导致中介者变得复杂且难以维护。
本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨
希望各位小伙伴动动自己可爱的小手,来一波点赞+关注 (✿◡‿◡) 让更多小伙伴看到这篇文章~ 蟹蟹呦(●’◡’●)
如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。
你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西



