zoukankan      html  css  js  c++  java
  • 【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改变了原来两个对象的耦合方式

  • 相关阅读:
    Eclipse debug模式下使用16进制(Hex)查看变量值
    无线局域网中RADIUS协议原理与实现
    浏览器发送URL的编码特性
    跨域共享cookie和跨域共享session
    Nginx与Apache工作方式
    Http字段含义
    http中有关缓存相关的几个字段
    maven中用yuicompressor和closure-compiler对js、css文件进行压缩
    Mysql 忘记密码----修改Navicat的连接密码--以及--(加入安装Navicat时没设置密码)有时新建连接设置密码,连接不成功---的问题解决方法 密码忘记的解决
    RedisTemplate的各种操作(set、hash、list、string)
  • 原文地址:https://www.cnblogs.com/ErinCodeMM/p/2310293.html
Copyright © 2011-2022 走看看