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

你可能感兴趣的:(openfire)