java中订阅者模式

来源:互联网 发布:python数据科学入门 编辑:程序博客网 时间:2024/06/17 13:18

参考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<>();@Overridepublic void AddGuanChaZhe(Abstract_guanChaZhe a) {// TODO Auto-generated method stub//添加一个观察者对象mList.add(a);}@Overridepublic void DelteteGuanChaZhe(Abstract_guanChaZhe a) {// TODO Auto-generated method stubmList.remove(a);}@Overridepublic void NotifyGuanChaZhe(String data) {// TODO Auto-generated method stubfor(Abstract_guanChaZhe guancha:mList){guancha.ReceiveData(data);}}}

小明-一个屌丝:

//其中一个观察者public class XiaoMing implements Abstract_guanChaZhe{@Overridepublic void ReceiveData(String data) {// TODO Auto-generated method stubif(data.equals("我病了")){System.err.println("小明说多喝热水");}}}

老王-一个屌丝:

public class LaoWang implements Abstract_guanChaZhe{@Overridepublic void ReceiveData(String data) {// TODO Auto-generated method stubif(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 0
原创粉丝点击