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.解决的问题     ...
  • android_cmos
  • android_cmos
  • 2016年01月09日 19:04
  • 6420

发布者订阅者模式(一)

自己画了个图 demo是用了两个场景来描述的,一个是找工作(查的资料),一个是购物,仿照写的,为了加深理解,根据名字可以知道订阅者和发布者,然后实体类分别取实现这两个接口类,来看订阅者 p...
  • qq_23195583
  • qq_23195583
  • 2016年06月28日 15:09
  • 1316

java设计模式-观察者模式(广播机制,消息订阅)

什么叫观察者模式: 观察者模式是广播机制,消息订阅和推送的核心设计。开发中常见的场景: 1.手机中消息推送 2.后台群发信息观察者模式例子(自己实现) 首先是定义观察者接口并使用三个子类实现/...
  • yingxiake
  • yingxiake
  • 2016年05月28日 19:13
  • 2739

Java观察者模式以及与订阅发布者模式区别

设计模式复习,代码是最好的说明。 定义:观察者模式定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新,属于行为类模式。 注意:观察者模式和发布订阅...
  • poyuan97
  • poyuan97
  • 2017年09月28日 16:15
  • 118

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

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

C#设计模式(一)订阅-发布模式

本来是在持续开发Besige,但考虑到以后迟早会在设计模式这块继续拓展,就新开了一个标题,算是个开个头。 模式这东西原本可以独立于语言之外来说,但考虑到不同语言的实现毕竟有些差异,我本人搜索文章时,也...
  • obmar45
  • obmar45
  • 2016年07月01日 22:55
  • 1304

Unity教程之-Unity3d中基于订阅者模式实现事件机制

我们知道通过在Unity3D中通过GetComponent就可以获得某个模块的实例,进而引用这个实例完成相关任务的调用。可是显然这种方法,就像我们随身带着现金去和不同的人进行交易,每次交易的时候都需要...
  • u013108312
  • u013108312
  • 2016年08月11日 17:20
  • 833

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

主要对像: 1、抽象的观察者/Watcher/Observer 以及具体实现 2、抽象的被观察者/Subject/Observable 以及具体实现 (1)目标和观察者之间的关系       ...
  • xuchuangfeng
  • xuchuangfeng
  • 2016年02月29日 18:33
  • 5344

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

模式的组成结构抽象主题(Subject) 它把所有观察者对象的引用保存到一个集合里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 具体主题(Concrete...
  • chenjianandiyi
  • chenjianandiyi
  • 2017年03月09日 11:17
  • 415

观察者(发布-订阅者)模式在Android中的简单应用

学过设计模式的少年or少女一定听说过观察者模式了,也就是多个观察者观察一个事物,当事物发生变化的时候,观察者也将进行动作改变。但是,为了让不懂的人儿or复习一下,我啰嗦一下什么是观察者模式: 什...
  • u011596810
  • u011596810
  • 2016年11月20日 17:47
  • 1601
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中订阅者模式
举报原因:
原因补充:

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