安卓复习之旅—观察者模式
来源:互联网 发布:田丰 阿里云 编辑:程序博客网 时间:2024/05/21 00:47
2016年最后一天,因公司性质,元旦继续上班,春节早一些放假,额…祝各位元旦快乐!!!
software entities should be open for extension,but closed for modefication;
一个良好的软件实体应该是对扩展开放,对修改关闭,即“开-闭”原则(Open-Closed principle),包含3种特性:可扩展性,灵活性以及可插入性,这就需要对Java各种设计模式能够灵活引用到项目中。
接下来复习一下Java的一些设计模式,今天先来看看观察者模式:
按照图谱一步一步来实现吧
step1定义被观察者接口
/** * 定义被观察者接口 * * @author Administrator * */public interface IObservered { /** * 订阅 */ void registerObserver(IObserver observer); /** * 取消 */ void unRegisterObserver(IObserver observer); /** * 通知所有观察者 */ void notifObservers();}
step2定义观察者都要实现的接口
public interface IObserver { /** * 接收到内容后的处理方法 * @param msg */ void update(String msg); /** * 取消订阅 * @param mSubject */ void unRegister(IObservered mSubject);}
step3定义一个具体的被观察者
public class Observered implements IObservered { private List<IObserver> observers = new ArrayList<IObserver>(); private String msg; @Override public void registerObserver(IObserver observer) { // TODO Auto-generated method stub observers.add(observer); } @Override public void unRegisterObserver(IObserver observer) { // TODO Auto-generated method stub int index = observers.indexOf(observer); if (index >= 0) { observers.remove(index); } } @Override public void notifObservers() { // TODO Auto-generated method stub for (IObserver observer : observers) { observer.update(msg); } } /** * 设置内容 * @param msg */ public void setMsg(String msg) { this.msg = msg; notifObservers(); }}
step4创建观察者
public class Observer1 implements IObserver { private IObservered mSubject; public Observer1(IObservered mSubject) { this.mSubject = mSubject; mSubject.registerObserver(this); } public void unRegister(IObservered mSubject) { this.mSubject = mSubject; mSubject.unRegisterObserver(this); } @Override public void update(String msg) { // TODO Auto-generated method stub System.out.println("Observer1 得到的消息:" + msg); }}
最后测试一下:
public class Test { public static void main(String[] args) { Observered mService = new Observered(); Observer1 mObserver1 = new Observer1(mService); mObserver1.unRegister(mService); Observer2 mObserver2 = new Observer2(mService); mService.setMsg("1111"); }}
执行结果:
Observer2 得到的消息:1111
0 0
- 安卓复习之旅—观察者模式
- 安卓复习之旅—工厂模式(一)
- 安卓复习之旅—工厂模式(二)
- 安卓复习之旅—工厂模式(三)
- 安卓复习之旅—单例模式
- 安卓设计模式之观察者模式
- 安卓设计模式之观察者模式
- (一)设计模式复习之观察者模式
- 安卓设计模式之_观察者模式
- 安卓常用的设计模式之观察者模式
- JAVA设计模式之观察者复习
- 安卓的观察者模式
- 安卓复习之旅——消息机制
- 安卓复习之旅—hashCode() 和equals()
- 安卓复习之旅—Java反射机制
- 安卓复习之旅—Java集合类
- 安卓复习之旅—String相关
- 安卓复习之旅—Java多线程同步
- eclipse查看jar包源代码乱码问题解决
- [Go语言]binary tree算法的华山论剑
- bootstrap-datetimepicker.js与IE8的兼容问题
- 网站后台改版,迁移老网站中Access数据库中新闻到新网站的方法
- 使用hibernate往mysql数据库插入数据中文乱码问题
- 安卓复习之旅—观察者模式
- android开发如何让声音从耳机和扬声器同时输出
- dorado7时间格式调整
- [C++]C++ STL Dijkstra算法 存储多条相同最短路径 shortest path
- 异步加载js 和 js时间线介绍
- 跟着斯坦福白胡子老头学UIDynamic动画的技巧
- 自定义实现微信通讯录效果View
- C++ STL template 重要吗?
- Struts2中的责任链模式模拟