一个接口形式的观察者模式
2017-04-21 16:06
337 查看
一个接口形式的观察者模式
总觉得外面世界有多美好,用几滴眼泪才换来骄傲 ——林中鸟
现在面试应该或多或少的都会提及观察者模式,如果你还没有被提到,那么别急你一定听说过火的都快要被烧焦的RxJava,那么今天又到了出橙色or白色装备的时间了。
看下接口形式的观察者怎么实现,上例子。
public class Observerable { // 持有一个接口 private OnObservListener onObservListener; public Observerable(OnObservListener onObservListener) { this.onObservListener = onObservListener; } // 静态创建方法 public static Observerable CREATE(OnObservListener onObserListener){ return new Observerable(onObserListener); } // 绑定观察者 public void addObServer(ObServer obServer){ addObServer(obServer,this); } public void addObServer(ObServer obServer,Observerable observerable){ if (obServer == null){ throw new IllegalArgumentException("obServer == null"); } if (observerable.onObservListener == null){ throw new IllegalStateException("onObservListener == null"); } // 创建代理模式来包裹实现 obServer = new ProxyObServer(obServer); observerable.onObservListener.call(obServer); } }
观察者监听接口:
public interface OnObservListener { /** * @param obServer 观察者 */ void call(ObServer obServer); }
public interface ObServer { void onStart(); void onNext(String s); void onFinish(); }
代理模式的实现:
public class ProxyObServer implements ObServer { private ObServer obServer; public ProxyObServer(ObServer obServer) { this.obServer = obServer; } @Override public void onStart() { obServer.onStart(); } @Override public void onNext(String s) { obServer.onNext(s); } @Override public void onFinish() { obServer.onFinish(); } }
测试代码:
public class Main { public static void main(String[] args) { Observerable observerable = Observerable.CREATE(new OnObservListener() { @Override public void call(ObServer obServer) { // obServer.onStart(); obServer.onNext("is on next"); obServer.onFinish(); } }); ObServer obServer = new ObServer() { @Override public void onStart() { System.out.println("onStart"); } @Override public void onNext(String s) { System.out.println("onNext:"+s); } @Override public void onFinish() { System.out.println("onFinish"); } }; observerable.addObServer(obServer); } }
输出信息:
onNext:is on next onFinish
等一下,看到这段测试代码我记得大约在冬季啊,顿时思绪万千
你是否见过这个栗子:
//被观察者 Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello"); subscriber.onCompleted(); } }); //实现observer的抽象类 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onNext(String s) { Log.d(tag, "Item: " + s); } @Override public void onCompleted() { Log.d(tag, "Completed!"); } @Override public void onError(Throwable e) { Log.d(tag, "Error!"); } }; observable.subscribe(subscriber);
PS 上方这段代码出自:给 Android 开发者的 RxJava 详解
多么惊人的相似啊?
那我是不是改一改再加上个泛型就可以向RxJava-1.x看齐?
Too young, Too simple.
我发出这样的感慨:我目前写的这段代码,都未曾显示RxJava的万分之一,我只能通过这样的方式,去学习他们的代码理念,我渴望力量啊。
Demo链接
相关文章推荐
- 观察者模式:当一个对象状态发生改变时,通知依赖他的全部对象都发生改变
- 设计引导---一个鸭子游戏引发的设计(多态,继承,抽象,接口,策略者模式)
- 一天一个设计模式之观察者模式
- 监听器和 利 用观察者设计模式设计一个程序
- 一个故事一个设计模式之观察者模式
- 接口回调,观察者模式,消息机制3者的区别
- C#面向对象的一个简单例子,继承、接口、重写都用上了,还用到了工厂模式
- 用观察者模式设计一个交通信号灯调度系统
- 抽象形式的观察者模式以及观察者模式的使用介绍
- JavaSE第八十四讲:Observable类与Observer接口详解,深入理解观察者模式
- 灵活利用泛型的MVP模式T-MVP(附带一个快速创建MVP接口的Android Studio插件-TMVPHelper)
- Php-SPL库中的观察者模式接口详解
- JTABLE 一个小格子添加2个按钮实现国际化 使用观察者设计模式
- GOF23设计模式之观察者模式的理解与实现2(使用java自带的观察者类和接口)
- 观察者模式生活中的一个应用
- 每天一个设计模式之观察者模式
- 关于复合模式、策略模式,工厂模式、观察者模式、装饰模式的一个好例子
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子
- 自实现观察者模式(发布/订阅模式)的一个隐藏bug
- 观察者模式的一个示例