`
cakin24
  • 浏览: 1430321 次
  • 性别: 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. **中介...

    中介者模式(Mediator Pattern) 1. 中介者模式概述 1.1 定义 1.2 基本思想 2. 中介者模式的结构 3. 中介者模式的UML类图 4. 中介者模式的工作原理 5. Java实

    中介者模式(Mediator Pattern) 1. 中介者模式概述 1.1 定义 1.2 基本思想 2. 中介者模式的结构 3. 中介者模式的UML类图 4. 中介者模式的工作原理 5. Java实现示例 5.1 基本实现示例 5.2 飞机空中交通控制示例 5.3 ...

    中介者模式代码示例

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

    设计模式 - 中介者模式

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

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

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

    中介者模式demo

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

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

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

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

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

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

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

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

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

    JAVA设计模式—中介者模式

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

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

    在软件设计领域,中介者模式(Mediator Pattern)是一种行为设计模式,旨在减少一组对象之间的通信复杂性。它允许对象之间通过一个中介者对象进行通信,从而避免了直接的相互引用。在日常生活中,定外卖的现象就是一...

    中介者模式(mediator)

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics