打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【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改变了原来两个对象的耦合方式

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
java第一次作业
UserServiceImpl.java
Android 警告对话框 AlertDialog
Java & xml学习笔记 SAX篇
使用Eclipse RCP创建视图并实现视图间消息传递
springmvc+websocket 简单实现消息即时推送
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服