java内置观察者_观察者设计模式(三) - Java自带的观察者

前言

1. java自带的观察者

在这里就直接使用java自带的被观察者和观察者,Observable和Observer;

2. 具体代码如下

1>:让具体的被观察者,直接继承 系统 java自带的 Observable

/**

* Email: 2185134304@qq.com

* Created by Novate 2018/5/27 15:12

* Version 1.0

* Params:

* Description: 具体的被观察者 - 鸿阳的微信公众号

*/

public class WXAdvanceObservable extends Observable {

private String article ;

public String getArticle() {

return article;

}

public void setArticle(String article) {

this.article = article;

// 通知更新,推送给微信用户

// update(article);

// 通知更新,推送给微信用户

// 有更新,就设置改变

setChanged();

notifyObservers(article);

}

}

2>:IWXUser,观察者,微信用户

/**

* Email: 2185134304@qq.com

* Created by Novate 2018/5/27 15:06

* Version 1.0

* Params:

* Description: 微信用户 - 订阅该微信公众号

*/

public interface IWXUser {

/**

* 读文章

*/

void push(String article) ;

}

3>:WXUser,具体的观察者,Novate、wangziwen,直接继承Observer ;

/**

* Email: 2185134304@qq.com

* Created by Novate 2018/5/27 15:14

* Version 1.0

* Params:

* Description: 具体的用户 - 订阅鸿阳的微信公众号

* 这个类不用了,直接用系统 java自带的 Observer

*/

public class WXUser implements Observer {

private String name ;

public WXUser(String name){

this.name = name ;

}

/*@Override

public void push(String article) {

System.out.println(name+"收到了一篇文章:"+article);

}*/

/**

* 推拉模式的结合 - 既可以推又可以拉

* @param o :具体的被观察者,具体的公众号,WXAdvanceObservable

* @param arg :推送的文章,article

*/

@Override

public void update(Observable o, Object arg) {

System.out.println(name + " 收到了一篇推送的文章:" + arg);

WXAdvanceObservable advanceObservable = (WXAdvanceObservable) o;

System.out.println(name + " 主动拉取一篇文章:" + advanceObservable.getArticle());

}

}

4>:测试代码如下:

/**

* Email: 2185134304@qq.com

* Created by Novate 2018/5/27 15:16

* Version 1.0

* Params:

* Description:

*/

public class Client {

public static void main(String[] args){

// 具体的被观察者 - 微信公众号 - 鸿阳的公众号

WXAdvanceObservable wxAdvanceObservable = new WXAdvanceObservable() ;

// 具体的观察者 - 微信公众号 - Novate

WXUser novate = new WXUser("novate") ;

WXUser wangziwen = new WXUser("wangziwen") ;

// 微信公众号 - 用户订阅公众号

wxAdvanceObservable.addObserver(novate);

wxAdvanceObservable.addObserver(wangziwen);

// 微信公众号 - 推送文章

wxAdvanceObservable.setArticle("《观察者设计模式 - 定义及事例代码》");

// 微信公众号 - 用户取消订阅公众号

wxAdvanceObservable.deleteObserver(wangziwen);

}

}

3. 使用java自带被观察者与自己定义的被观察者区别?

自己定义的被观察者:需要自己手动写被观察者,然后让具体的被观察者继承;

使用java自带的被观察者:直接继承java自带的被观察者 Observable、Observer即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值