您的位置:首页 > 其它

中介者模式(Mediator Pattern)

2014-02-10 11:57 239 查看

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

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

 

 

 

角色分析:

     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);
}

}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: