什么是调停者模式?,书上说调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。
今天主要是用调停者模式实现简单消息通信,写了简单的一个demo,拿过来分享下,理论那些东东就不多说了,实践最重要。
1.首先定义个消息对象
public interface Message {
//处理消息
public abstract void disposeMessage(int msg_Type, Object value);
//设置调停者
public abstract void setMediator(MessageMediator mediator);
}
2.那些可以相互通信的对象,可以称为同事对象。那么定义个抽象同事对象实现这个接口。
public abstract class Colleague implements Message {
protected MessageMediator mediator;
@Override
public void setMediator(MessageMediator m) {
this.mediator = m;
}
}
3.然后定义几个具体同事对象A和B同事。
public class A extends Colleague {
@Override
public void disposeMessage(int msg_Type, Object value) {
if(msg_Type==1){
System.out.println("收到测试数据1");
}
}
}
public class B extends Colleague {
@Override
public void disposeMessage(int msg_Type, Object value) {
if(msg_Type==0){
System.out.println("收到测试数据0");
}
}
}
4.然后定义抽象调停者对象。
public abstract class MessageMediator {
protected Set<Message> items = new HashSet<Message>(10);
public synchronized void addListener(Message msg) {
msg.setMediator(this);
items.add(msg);
}
public synchronized void removeListener(Message msg) {
if (null != msg) {
items.remove(msg);
}
}
//发送消息
public abstract void sendMessage(int type_msg, Object value);
}
5.然后定义一个具体调停者对象
public class ConcreteMessageMediator extends MessageMediator {
@Override
public synchronized void sendMessage(int type_msg, Object value) {
Set<Message> set = new HashSet<Message>(super.items);
Iterator<Message> it = set.iterator();
Message temp;
while (it.hasNext()) {
temp = it.next();
if (null != temp) {
temp.disposeMessage(type_msg, value);
} else {
it.remove();
}
}
}
}
6.上面几部都完成,我们写个类测试下
public class Test {
public static void main(String[] args) {
ConcreteMessageMediator _messageMed=new ConcreteMessageMediator();
A a=new A();
B b=new B();
_messageMed.addListener(a);
_messageMed.addListener(b);
_messageMed.sendMessage(0, "测试数据0");
_messageMed.sendMessage(1, "测试数据1");
}
}
7.看打印结果
收到测试数据0
收到测试数据1
这边我也就不讲解调停者模式的概念了,不讲解什么是设计模式,那些大师大神的思想,我们知道会用就行了,其实这么多设计模式我也不懂,也不会用,只要能找到解决问题的方法就行。
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)