一模式定义
中介者模式,用一个中介对象来封装一系列对象之间的交互,使各个对象中不需要显示地引用其他对象实例,从而降低各个对象之间的耦合度,并且可以独立地改变对象间的交互关系。
二模式举例
1模式分析
我们借用多人聊天室来说明这一模式
2中介模式静态类图
3代码示例
3.1中介者接口——IMediator
package com.demo.mediator; import com.demo.colleague.IUser; /** * 中介者接口 * * @author * */ public interface IMediator { /** * 注册用户信息 * * @param user */ public void regist(IUser user); /** * 发送消息给所有人 * * @param user * 发送消息人 */ public void notifyAllMessage(IUser user); }
3.2中介者实现——ConcreteMediator
package com.demo.mediator; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.demo.colleague.IUser; /** * 中介者实现类 * * @author * */ public class ConcreteMediator implements IMediator { private final List<IUser> list = new ArrayList<IUser>(); /** * 注册用户信息 * * @param user */ public void regist(IUser user) { if (user != null && !list.contains(user)) { list.add(user); } } /** * 发送消息 * * @param user * 发送消息人 */ public void notifyAllMessage(IUser user) { Iterator<IUser> iterator = list.iterator(); IUser tmpUser = null; while (iterator.hasNext()) { tmpUser = iterator.next(); if (tmpUser != null && !tmpUser.equals(user)) { // 排除发送消息用户 tmpUser.receiveMessage(user.getMessage()); } } } }
3.3用户接口——IUser
package com.demo.colleague; /** * 用户接口 * * @author * */ public interface IUser { /** * 接收消息 * * @param message * 消息 */ public void receiveMessage(String message); /** * 发送消息 * * @param message * 消息 */ public void sendMessage(String message); /** * 获得发送的消息内容 * * @return */ public String getMessage(); }
3.4抽象用户——AbstractUser
package com.demo.colleague; import com.demo.mediator.IMediator; /** * 抽象用户信息 * * @author * */ public abstract class AbstractUser implements IUser { // 中介者 protected IMediator mediator; // 姓名 protected String name; // 消息 protected String message; public AbstractUser(IMediator mediator, String name) { this.mediator = mediator; this.name = name; } /** * 发送消息 * * @param message * 消息 */ public void sendMessage(String message) { this.message = message; System.out.println(this.name + " 说:" + this.message); mediator.notifyAllMessage(this); } public String getMessage() { return message; } }
3.5用户A——UserA
package com.demo.colleague; import com.demo.mediator.IMediator; /** * 用户A * * @author * */ public class UserA extends AbstractUser { public UserA(IMediator mediator, String name) { super(mediator, name); // 注册到中介者对象中 mediator.regist(this); } /** * 接收消息方法 */ public void receiveMessage(String message) { System.out.println("User A Received Message : " + message); } }
3.6用户B——UserB
package com.demo.colleague; import com.demo.mediator.IMediator; /** * 用户B * * @author * */ public class UserB extends AbstractUser { public UserB(IMediator mediator, String name) { super(mediator, name); // 注册到中介者对象中 mediator.regist(this); } /** * 接收消息方法 */ public void receiveMessage(String message) { System.out.println("User B Received Message : " + message); } }
3.7用户C——UserC
package com.demo.colleague; import com.demo.mediator.IMediator; /** * 用户C * * @author * */ public class UserC extends AbstractUser { public UserC(IMediator mediator, String name) { super(mediator, name); // 注册到中介者对象中 mediator.regist(this); } /** * 接收消息方法 */ public void receiveMessage(String message) { System.out.println("User C Received Message : " + message); } }
3.8运行多人聊天室
package com.demo; import com.demo.colleague.IUser; import com.demo.colleague.UserA; import com.demo.colleague.UserB; import com.demo.colleague.UserC; import com.demo.mediator.ConcreteMediator; import com.demo.mediator.IMediator; /** * * 主应用程序 * * @author * */ public class Client { /** * @param args */ public static void main(String[] args) { // 创建聊天室(中介者) IMediator mediator = new ConcreteMediator(); // 创建用户信息 IUser userA = new UserA(mediator, "张三"); IUser userB = new UserB(mediator, "李四"); IUser userC = new UserC(mediator, "王五"); System.out .println("============================================================"); userA.sendMessage("大家好,我叫张三!初来乍到,请多多关照!"); System.out .println("============================================================\n"); System.out .println("============================================================"); userB.sendMessage("你好,我叫李四,欢迎加入!"); System.out .println("============================================================\n"); System.out .println("============================================================"); userC.sendMessage("我是王五,欢迎欢迎!"); System.out .println("============================================================\n"); } }
4运行结果
============================================================
张三 说:大家好,我叫张三!初来乍到,请多多关照!
User B Received Message : 大家好,我叫张三!初来乍到,请多多关照!
User C Received Message : 大家好,我叫张三!初来乍到,请多多关照!
============================================================
============================================================
李四 说:你好,我叫李四,欢迎加入!
User A Received Message : 你好,我叫李四,欢迎加入!
User C Received Message : 你好,我叫李四,欢迎加入!
============================================================
============================================================
王五 说:我是王五,欢迎欢迎!
User A Received Message : 我是王五,欢迎欢迎!
User B Received Message : 我是王五,欢迎欢迎!
============================================================
三该模式设计原则
1一对多的对象依赖转化为一对一依赖
2集中控制提高类的复用性
四使用场合
(1)一组对象以定义良好但复杂的方式进行通信,产生相互依赖关系结构混乱且难以理解。注意多个对象之间的相互依赖。
(2)想定制一个分布在多个类的行为,而不想生成太多的子类场合。
(3)产品架构的研发,更需要易于扩展的场合。
五中介模式静态类图
相关推荐
Java基于中介者模式实现多人聊天室功能示例是一种非常有用的技术,可以用于处理多个用户之间的交互,使得系统更加灵活和可维护。但是,需要注意的是,中介者模式也可以增加系统的复杂度和耦合度,因此需要根据实际...
一个“JAVA实现的多人聊天室”是利用Java技术构建的在线实时通讯平台,允许多个用户同时参与对话。这个系统通常基于客户端-服务器架构,其中服务器作为中介,接收并转发所有用户的聊天消息。 ### 主要组件和概念 1...
在这个项目中,"netty实现的多人聊天室,有gui界面",开发者利用Netty的强大功能构建了一个支持多用户同时在线交流的聊天系统,并且配备了图形用户界面(GUI),使得用户交互更加直观易用。 首先,我们要理解Netty...
综上所述,实现一个类似QQ的多人聊天室需要综合运用多种技术和编程知识,包括Socket通信、C/S模式、多线程、数据格式化、网络安全、数据库管理以及用户界面设计等。通过不断优化和迭代,我们可以构建出一个高效、...
在给出的部分内容中,可以看到一个名为`TChatAdm`的远程数据模块类,它实现了`IChatAdm`接口,并且在`RemoteDataModuleCreate`事件中可能初始化和配置中介者对象,用于处理聊天室的交互逻辑。这个例子展示了中介者...
此时,我们可以引入一个“聊天室”作为中介者,所有用户对象都与聊天室交互,而聊天室负责转发消息。这样,每个用户只需要知道如何与聊天室交互,而无需了解其他所有用户。 中介者模式的核心组件包括: 1. **中介...
在实际的应用场景中,比如聊天室系统,用户(同事对象)发送的消息不会直接传递给其他用户,而是先通过服务器(中介者)进行转发。这样,即使有新的用户加入或离开,只需修改服务器的代码,而不会影响到原有用户对象...
中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...
在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...
中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在iOS开发中,当多个视图控制器或其他组件之间存在复杂的通信关系时,中介者模式可以帮助我们简化这种关系,避免对象间的直接耦合。这个...
1. 聊天室系统:中介者模式可以用于实现聊天室系统,聊天室服务器作为中介者,负责协调用户之间的通信。 2. 客户端-服务器系统:中介者模式可以用于实现客户端-服务器系统,服务器作为中介者,负责协调客户端之间的...
**中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...
**中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...
在这个场景中,我们关注的是一个使用C#编程语言编写的基于UDP(用户数据报协议)的多人聊天系统。UDP是一种无连接的、不可靠的传输层协议,它允许快速发送数据但不保证数据的顺序或完整性。C#提供了一个强大的.NET ...
在Java中,中介者模式通过一个中心类(中介者)来协调各个对象之间的交互,避免了对象之间复杂的相互引用关系,从而使得代码更加清晰,易于维护。这个中心类并不执行任何特定的业务逻辑,而是作为通信的平台,负责...
**中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...
中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在这个例子中,我们使用生活中的定外卖现象来阐述这个概念。定外卖的过程中涉及到顾客、餐厅、配送员等多个角色,它们之间存在复杂的通信...
中介者模式是一种行为设计模式,它的主要目的是降低多个对象之间的耦合度,使得这些对象不必互相了解彼此的实现细节,而是通过一个中介对象进行通信。在C#中,我们可以使用类或接口来实现这个中介者。这种模式的核心...
中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过引入一个中介对象来协调这些对象的交互。这种模式有助于减少对象之间的耦合,使得各个对象可以独立地进行修改和扩展。 **概念理解** 1....
例如,在一个多人聊天室中,中介者可以是服务器,负责转发用户的聊天消息;每个用户则是一个同事类,它们只需与服务器通信,而无需关心其他用户的存在。 总结起来,C#中的中介者设计模式提供了一种有效的手段来管理...