java中订阅者模式

参考http://blog.csdn.net/android_cmos/article/details/50489055

基本概念

抽象主题:所有的观察者对象的引用在一个集合中,每个主题都可以有任何数量的观察者,抽象对象提供一个接口,可以增加和删除观察者。(女神类)

具体对象:将有关状态存入具体观察者对象,在具体主题内部状态改变时,给所有登记过的观察者发送通知(小红-一个女神)

抽象观察者:为所有具体观察者定义一个接口,在得到主题通知时更新自己。(一个屌丝对象)

具体观察者:实现抽象观察者所需要的更新接口(小明和老王两个屌丝)

具体代码实现:

 女神:

package test_dingyuezhe;
//被观察者
public interface Abatract_model {
	//添加观察者
public void AddGuanChaZhe(Abstract_guanChaZhe a);
//删除观察者
public void DelteteGuanChaZhe(Abstract_guanChaZhe a);
//通知观察者
public void NotifyGuanChaZhe(String data);
}
屌丝:

public interface Abstract_guanChaZhe {
	//收到抽象主题发出的信息
public void ReceiveData(String data);
}
小红-一个女神:

/*
 * 小红--一个主题---订阅的对象
 */
public class XiaoHong implements Abatract_model{
//观察者的集合
	private List<Abstract_guanChaZhe> mList=new ArrayList<>();
	
	@Override
	public void AddGuanChaZhe(Abstract_guanChaZhe a) {
		// TODO Auto-generated method stub
		//添加一个观察者对象
	mList.add(a);	
	}

	@Override
	public void DelteteGuanChaZhe(Abstract_guanChaZhe a) {
		// TODO Auto-generated method stub
		mList.remove(a);
	}

	@Override
	public void NotifyGuanChaZhe(String data) {
		// TODO Auto-generated method stub
		for(Abstract_guanChaZhe guancha:mList){
			guancha.ReceiveData(data);
		}
	}


}

小明-一个屌丝:

//其中一个观察者
public class XiaoMing implements Abstract_guanChaZhe{

	@Override
	public void ReceiveData(String data) {
		// TODO Auto-generated method stub
		if(data.equals("我病了")){
			System.err.println("小明说多喝热水");
		}
	}

}

老王-一个屌丝:

public class LaoWang implements Abstract_guanChaZhe{

	@Override
	public void ReceiveData(String data) {
		// TODO Auto-generated method stub
		if(data.equals("我病了")){
			System.err.println("老王说我就去你家");
			
		}
	}

}
测试类:

public class MyTest {
public static void main(String[] args) {
	//小红说我病了,看小明和老王的表现
	XiaoMing xiaoming=new XiaoMing();
	LaoWang laownag=new LaoWang();
	XiaoHong xiaohong=new XiaoHong();
	xiaohong.AddGuanChaZhe(laownag);
	xiaohong.AddGuanChaZhe(xiaoming);
	xiaohong.NotifyGuanChaZhe("我病了");
	
	xiaohong.DelteteGuanChaZhe(xiaoming);
	xiaohong.NotifyGuanChaZhe("我病了");
}
}
输出信息:

老王说我就去你家
小明说多喝热水


老王说我就去你家






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值