`
cakin24
  • 浏览: 1388529 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

中介者模式一多人聊天室

阅读更多

一模式定义

中介者模式,用一个中介对象来封装一系列对象之间的交互,使各个对象中不需要显示地引用其他对象实例,从而降低各个对象之间的耦合度,并且可以独立地改变对象间的交互关系。

 

二模式举例

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)产品架构的研发,更需要易于扩展的场合。

 

五中介模式静态类图


 

  • 大小: 91.4 KB
  • 大小: 114.2 KB
  • 大小: 20 KB
1
0
分享到:
评论

相关推荐

    Java基于中介者模式实现多人聊天室功能示例

    Java基于中介者模式实现多人聊天室功能示例是一种非常有用的技术,可以用于处理多个用户之间的交互,使得系统更加灵活和可维护。但是,需要注意的是,中介者模式也可以增加系统的复杂度和耦合度,因此需要根据实际...

    JAVA实现的多人聊天室

    一个“JAVA实现的多人聊天室”是利用Java技术构建的在线实时通讯平台,允许多个用户同时参与对话。这个系统通常基于客户端-服务器架构,其中服务器作为中介,接收并转发所有用户的聊天消息。 ### 主要组件和概念 1...

    netty实现多人聊天室,有gui界面

    在这个项目中,"netty实现的多人聊天室,有gui界面",开发者利用Netty的强大功能构建了一个支持多用户同时在线交流的聊天系统,并且配备了图形用户界面(GUI),使得用户交互更加直观易用。 首先,我们要理解Netty...

    多人聊天室(类似qq的模式,指定对象进行聊天)

    综上所述,实现一个类似QQ的多人聊天室需要综合运用多种技术和编程知识,包括Socket通信、C/S模式、多线程、数据格式化、网络安全、数据库管理以及用户界面设计等。通过不断优化和迭代,我们可以构建出一个高效、...

    中介者模式逻辑关系

    在给出的部分内容中,可以看到一个名为`TChatAdm`的远程数据模块类,它实现了`IChatAdm`接口,并且在`RemoteDataModuleCreate`事件中可能初始化和配置中介者对象,用于处理聊天室的交互逻辑。这个例子展示了中介者...

    java设计模式之中介者模式

    此时,我们可以引入一个“聊天室”作为中介者,所有用户对象都与聊天室交互,而聊天室负责转发消息。这样,每个用户只需要知道如何与聊天室交互,而无需了解其他所有用户。 中介者模式的核心组件包括: 1. **中介...

    中介者模式代码示例

    在实际的应用场景中,比如聊天室系统,用户(同事对象)发送的消息不会直接传递给其他用户,而是先通过服务器(中介者)进行转发。这样,即使有新的用户加入或离开,只需修改服务器的代码,而不会影响到原有用户对象...

    设计模式 - 中介者模式

    中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...

    设计模式-中介者模式(讲解及其实现代码)

    在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...

    中介者模式demo

    中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在iOS开发中,当多个视图控制器或其他组件之间存在复杂的通信关系时,中介者模式可以帮助我们简化这种关系,避免对象间的直接耦合。这个...

    java常用设计模式-中介者模式

    1. 聊天室系统:中介者模式可以用于实现聊天室系统,聊天室服务器作为中介者,负责协调用户之间的通信。 2. 客户端-服务器系统:中介者模式可以用于实现客户端-服务器系统,服务器作为中介者,负责协调客户端之间的...

    设计模式专题之(十七)中介者模式---设计模式中介者模式示例代码(python--c++)

    **中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...

    设计模式 - 中介者模式(C++实例)

    **中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...

    C#编写的基于UDP的多人聊天系统

    在这个场景中,我们关注的是一个使用C#编程语言编写的基于UDP(用户数据报协议)的多人聊天系统。UDP是一种无连接的、不可靠的传输层协议,它允许快速发送数据但不保证数据的顺序或完整性。C#提供了一个强大的.NET ...

    JAVA设计模式—中介者模式

    在Java中,中介者模式通过一个中心类(中介者)来协调各个对象之间的交互,避免了对象之间复杂的相互引用关系,从而使得代码更加清晰,易于维护。这个中心类并不执行任何特定的业务逻辑,而是作为通信的平台,负责...

    中介者模式(mediator)

    **中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...

    一个演示中介者模式的例子我们用的生活中的定外卖的现象做示例.zip

    中介者模式是一种设计模式,它在软件工程中用于降低多个对象之间的复杂交互。在这个例子中,我们使用生活中的定外卖现象来阐述这个概念。定外卖的过程中涉及到顾客、餐厅、配送员等多个角色,它们之间存在复杂的通信...

    C#设计模式之中介者模式小例子

    中介者模式是一种行为设计模式,它的主要目的是降低多个对象之间的耦合度,使得这些对象不必互相了解彼此的实现细节,而是通过一个中介对象进行通信。在C#中,我们可以使用类或接口来实现这个中介者。这种模式的核心...

    设计模式之中介者模式(Mediator Pattern)

    中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过引入一个中介对象来协调这些对象的交互。这种模式有助于减少对象之间的耦合,使得各个对象可以独立地进行修改和扩展。 **概念理解** 1....

    c#设计模式之中介者

    例如,在一个多人聊天室中,中介者可以是服务器,负责转发用户的聊天消息;每个用户则是一个同事类,它们只需与服务器通信,而无需关心其他用户的存在。 总结起来,C#中的中介者设计模式提供了一种有效的手段来管理...

Global site tag (gtag.js) - Google Analytics