中介者模式
说明
中介者模式(Mediator Pattern)属于行为型模式,又称为调解者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
该模式主要解决的是对象间通信的问题,多个对象之间需要相互通信,如果每个对象都持有交互对象的引用,那么对象间的耦合度太高,不利用维护与扩展。中介者模式将对象间相互依赖的网状关系,重构成了星状关系,对象之间的通信交给中介者集中进行管理即可。
结构
抽象中介者(Mediator):定义各同事角色之间通信的接口,该角色根据需求创建,不是必须的;
具体中介者(ConcreteMediator):管理具体的同事对象,并且负责它们之间的通信;
抽象同事(Colleague):定义同一类型同事的统一行为,该角色根据需求创建,不是必须的;
具体同事(ConcreteColleague):需要持有具体中介者的引用,与其他对象通信时,调用中介者完成。
代码案例
具体同事(ConcreteColleague)
/*** @program: mediator* @description: 用户类* 具体同事(ConcreteColleague)* @author: wxw* @create: 2024-03-13 11:14**/
@Data
@AllArgsConstructor
public class User {private String name;private MessagePlatform mp;// 通过中介者发送消息public void sendMsg(String name, String msg){mp.sendMsg(this, name, msg);}// 得到消息public void getMsg(String name, String msg){System.out.println(String.format("【%s】收到来自【%s】的消息:%s",this.name, name, msg));}}
具体中介者(ConcreteMediator)
/*** @program: mediator* @description: 短信平台* 具体中介者(ConcreteMediator)* @author: wxw* @create: 2024-03-13 11:16**/
public class MessagePlatform {// 保存所有需要管理的对象private Map<String,User> userMap = new HashMap<>();// 注册用户public void registerUesr(User user){userMap.put(user.getName(),user);}// 发送消息public void sendMsg(User send, String receive, String msg){if(!userMap.containsKey(receive)){System.out.println("对不起,用户【" + receive + "】还未注册,发送消息失败!!!");return;}// 转发消息User user = userMap.get(receive);user.getMsg(send.getName(), msg);}}
客户端
public class Test {public static void main(String[] args) {MessagePlatform mp = new MessagePlatform();User zs = new User("张三",mp);User ls = new User("李四",mp);User ww = new User("王五",mp);User zl = new User("赵六",mp);// 注册张三、李四、王五,赵六未注册mp.registerUesr(zs);mp.registerUesr(ls);mp.registerUesr(ww);zs.sendMsg("李四", "出来玩呀!!!");ls.sendMsg("张三", "加班呢,没空!!!");zs.sendMsg("王五", "出来玩不?");ww.sendMsg("张三","可以啊,我来找你!!!");ww.sendMsg("赵六", "一起去张三家玩呀!");}
}
输出结果
【李四】收到来自【张三】的消息:出来玩呀!!!
【张三】收到来自【李四】的消息:加班呢,没空!!!
【王五】收到来自【张三】的消息:出来玩不?
【张三】收到来自【王五】的消息:可以啊,我来找你!!!
对不起,用户【赵六】还未注册,发送消息失败!!!