【openfire插件开发】群组聊天中的中介者模式
原文链接:http://www.hechunchen.info/?p=54
生活中的中介者非常常见,比如维护世界和平的联合国组织、房屋中介、出国中介。那么,设计模式中的中介者模式是怎么样的呢?我们openfire中的群组聊天就是a typical example。我们用一个简化的群组聊天模型来说明mediator(中介者)模式。
我们的考虑是这样的,我们在用户之间添加中介者——聊天室。这样的话,用户之间的耦合度就会降低,而且不需要相互引用。它们只需独立地跟中介者交互即可。 结构图如下:
下面贴上关键代码。 接口IChatroom.java:
package mediator; public interface IChatroom { void forward(User from, User to, String message); } |
Chatroom.java:
package mediator; public class Chatroom implements IChatroom { @Override public void forward(User from, User to, String message) { // TODO Auto-generated method stub if (to!= null ) { to.receive(from, message); } } } |
抽象类User.java:
package mediator; public abstract class User { IChatroom room; public User(IChatroom room) { this .room = room; } public abstract void send(User to, String message); public abstract void receive(User from, String message); } |
MaleUser.java:
package mediator; public class MaleUser extends User { public MaleUser(IChatroom room) { super (room); // TODO Auto-generated constructor stub } @Override public void receive(User from, String message) { // TODO Auto-generated method stub System.out.println( "帅哥我收到了:" + message); } @Override public void send(User to, String message) { // TODO Auto-generated method stub room.forward( this , to, message); } } |
FemaleUser.java:
package mediator; public class FemaleUser extends User { public FemaleUser(IChatroom room) { super (room); // TODO Auto-generated constructor stub } @Override public void receive(User from, String message) { // TODO Auto-generated method stub System.out.println( "美女我收到了:" + message); } @Override public void send(User to, String message) { // TODO Auto-generated method stub room.forward( this , to, message); } } |
测试类TestClient.java:
package mediator; public class TestClient { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub IChatroom room = new Chatroom(); FemaleUser hcc = new FemaleUser(room); MaleUser fq = new MaleUser(room); MaleUser gq = new MaleUser(room); MaleUser lp = new MaleUser(room); //男给男发消息 gq.send(fq, "吃饭了没?" ); //男给女发消息 lp.send(hcc, "我也没吃饭" ); } } |
总结一下,Mediator改变了原来两个对象的耦合方式。
分类:
openfire&xmpp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述