调停者模式实现对象间简单消息通信

    什么是调停者模式?,书上说调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

    今天主要是用调停者模式实现简单消息通信,写了简单的一个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
    这边我也就不讲解调停者模式的概念了,不讲解什么是设计模式,那些大师大神的思想,我们知道会用就行了,其实这么多设计模式我也不懂,也不会用,只要能找到解决问题的方法就行。 大笑






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值