中介者模式(Mediator Pattern)

中介者模式又称调停者模式,属行为模式。

 用一个中介者来封装多个对象之间负责的交互行为,中介者对象使各交互对象之间不需显示的声明相互引用,从而使对象之间松耦合,而且可以独立的改变他们之间的交互行为。

角色分析:

     Mediator(抽象中介者):

        定义同事类之间的通讯接口。

    ConcreteMediator(具体中介者):

        实现同事类之间的通讯接口,并维护它对各个同事类的引用。

     Colleague(抽象同事类):

       定义同事类的公共方法

    ConcreteColleague(具体同事类):

       具体同事类为抽象同事类的子类,每一个同事类都会引用一个中介者对象,同事类之间的通讯,先告知中介者,由中介者完成通讯过程。

使用场景:

       1、多个对象之间存现相互的引用。

       2、一个对象对多个对象之间有通信,可将通信行为放入中介者,从而将那个对象独立出来。

例:网上简易聊天室

package mediator;


/**
 *create by datao.wang 2014-2-10-上午10:40:32	
 *抽象中介者  聊天房间
 */
public abstract class AbstractChatroom {
    //注册成员
	public abstract void regiser(Member member);
	//发送消息
	public abstract void sendText(String from,String to,String message);
}


package mediator;

import java.util.HashMap;
import java.util.Map;


/**
 *create by datao.wang 2014-2-10-上午10:45:57	
 *具体中介者
 */
public class Chatroom extends AbstractChatroom {
    //引用同事对象
	private Map<String,Member> map=new HashMap<String,Member>();
	@Override
	public void regiser(Member member) {
		if(map.get(member.getName())==null){
			map.put(member.getName(),member);
		}
	}

	@Override
	public void sendText(String from,String to,String message) {
		Member member=map.get(to);
		if(member!=null){
			member.receiveMessage(from,message);
		}
	}

}


package mediator;
/**
 *create by datao.wang 2014-2-10-上午10:48:58	
 * 抽象同事角色
 */
public abstract class Member {
	//对中介者的引用
	public AbstractChatroom chatroom;
  
  	public  String name;
  	
  	public abstract void receiveMessage(String from,String message);
  	
	public abstract void sendMessage(String to,String message);

	public AbstractChatroom getChatroom() {
		return chatroom;
	}
	
	public void setChatroom(AbstractChatroom chatroom) {
		this.chatroom = chatroom;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
  
}


package mediator;
/**
 *create by datao.wang 2014-2-10-上午11:11:12	
 *具体同事角色
 */
public class ConcreteMember extends Member {

	public ConcreteMember(String name){
		this.name=name;
	}
	@Override
	public void receiveMessage(String from, String message) {
		System.out.println(message+"----------------------");
	}

	@Override
	public void sendMessage(String to, String message) {
		this.chatroom.sendText(this.getName(), to, message);
	}
	
}


猜你喜欢

转载自wdt1988520.iteye.com/blog/2013170
今日推荐