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

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


老王说我就去你家






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

相关文章推荐

ZMQ(ZeroMQ)中订阅者和发布者模式的编写(PUB_SUB)

ZeroMQ是建立在socket之上的通讯接口,详情可以参考http://zeromq.org/,由于ZeroMQ还没写入linux内核,所以使用ZeroMQ需要安装第三方库libzmq,上篇博客也说...

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

六、Android 高版本向低版本兼容 ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题 项目地址:https:...
  • pcaxb
  • pcaxb
  • 2015年07月06日 16:01
  • 1566

关于生产者/消费者/订阅者模式的那些事

生产者/消费者模式简介用来干嘛的?生产者/消费者模式的产生主要目的就是为了解决非同步的生产与消费之间的问题。什么是非同步呢? 比如我刚刚生产了某个产品,而此时你正在打游戏,没空来取,要打完游...

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

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

发布者订阅者模式(一)

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

Github开源Android资源整理(九)公共库,高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器

五、Android公共库 Guava Google的基于java1.6的类库集合的扩展项目,包括collections, caching, primitives support, conc...

ZeroMQ之模式二 发布者订阅者(publish-subscribe)

一、前言 zeromq pub-sub模型,发布者将一系列数据发送到订阅者。例如Rss 和微博关注 二、code #-------------# ...

RAC基础学习一:信号和订阅者模式

我们在领略到RAC的强大和不可思议的时候,需要思考两个地方:1、它是如何实现的?第二个问题则更有难度:2、它是如何想到这样设计的? 这里我们先尝试研究第一个问题,它是如何实现的,分析主要的脉络。 ...

zeroMQ初体验-30.发布/订阅模式进阶-自裁的蜗牛订阅者

在初次介绍发布/订阅模式的时候,就已经抖出了这个包袱:如果订阅者的消费速度慢,则会造成发布者端队列堆积,怎么办?本篇即是针对可能出现的"蜗牛"般的订阅者而生。 通常的做法: 在发布端用靠...
  • suhheng
  • suhheng
  • 2011年10月10日 15:37
  • 1371

观察者模式——出版者与订阅者

小结: 再一次学习设计模式,跟第一次学大话的时候很不一样。《Head First》中总会给你一些新的理解,比如博客中蓝字标出的文字,如果不能理解这些原则,即使代码实现了也没有多大的收获。所...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中订阅者模式
举报原因:
原因补充:

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