java中订阅者模式

原创 2017年01月03日 10:52:43

参考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("我病了");
}
}
输出信息:

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


老王说我就去你家






版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

java笔记--设计模式之观察者(订阅/发布)模式

1.定义        定义对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2.解决的问题     ...

观察者模式 (发布­-订阅模式)

1.意图:     定义对象间的一种一对多的依赖关系,当一个主题对象的状态发生改变时, 所有监听它的观察者对象都得到通知并被自动更新。 2.类图:       3....

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

设计模式---订阅发布模式(Subscribe/Publish)

订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。       将一个系统分割成一系列相...

Java——Redis的发布订阅基本实现

参考文档:http://www.runoob.com/redis/redis-pub-sub.html Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅...

观察者模式和发布/订阅模式的区别

在处理自定义事件时,观察者模式和发布/订阅模式经常使用,起初不了解这两个模式的实现时,在网上看一些资料,很多介绍都将两种模式混淆在一起,认为他们是同一个模式、一样的实现。后来看了一些设计模式的书籍,感...

ZeroMQ:订阅-发布模式的java程序示例

ZeroMQ:订阅-发布模式的java程序示例  休息完了我们可以接着我们的旅程了,现在我们来验证下自己编译生成的东西是否能用, 具体怎么编译就请回顾我们的上期旅行http://blog.csdn...

设计模式之观察者模式(发布-订阅模式publish/Subscribe)

观察者模式 Observer   观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。   这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更...

[设计模式] 观察者模式(发布-订阅/Publish-subscribe模式)

主要对像: 1、抽象的观察者/Watcher/Observer 以及具体实现 2、抽象的被观察者/Subject/Observable 以及具体实现 (1)目标和观察者之间的关系       ...

Android 开源项目android-open-project工具库解析之(二) 高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器,安全,插件化,文件

六、Android 高版本向低版本兼容 ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题 项目地址:https:...
  • pcaxb
  • pcaxb
  • 2015-07-06 16:01
  • 1213
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)