首页 > 其他分享 >Android 设计模式:(二)观察者模…

Android 设计模式:(二)观察者模…

时间:2023-07-31 17:04:38浏览次数:34  
标签:observers observer Observer 对象 观察者 blog Android 设计模式


Android 设计模式:(二)观察者模式 —— 让你的对象知悉现况



设计模式 2012-05-28 13:28  1074人阅读  评论(1)  收藏  举报



*观察者模式:定义了对象之间的一对多依赖关系,当一个对象(主题对象)的状态改变时,它的所有依赖者(观察者对象)都会收到通知并自动更新。

*观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口。在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象。

*观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用。
软件设计原则:努力在交互对象之间实现松耦合,使它们之间的互相依赖降到最低,从而提高可复用性。

*Java内置了对观察者模式的支持:java.util.Observable类和java.util.Observer接口。

*java.util.Observable类的局限:

1、它是一个类,而不是接口,由于Java不支持多重继承,所以主题类无法同时拥有它和另一个超类的行为,这限制了Observable类的复用潜力。违反了“针对接口编程,而不是针对实现编程”的软件设计原则。

2、它的某些如setChanged()这样的方法被定义为protected,要使用它们就必须继承Observable类,这违反了“多用组合,少用继承”的软件设计原则。

如果上面两条限制妨碍了你的使用,就应该考虑自己设计实现观察者模式。

*在观察者模式中,传递数据的方式有“推”和“拉”两种,Java内置的实现支持这两种方式,然而较常用的为“推”数据。

*观察者模式以松耦合的方式在对象之间传递状态,MVC是其代表。

观察者(Observer)模式实例




1.  publicinterfaceSubject {  
2.    publicvoidaddObserver(Observer observer);  
3.  
4.    publicvoidremoveObserver(Observer observer);  
5.  
6.    publicvoidnotifyObservers();  
7.  
8.  
9.  publicinterfaceObserver {  
10.    publicvoidupdate(String blog);  
11.  
12.  
13.  //博客 
14.  publicclassBlogger implementsSubject {  
15.    privateList<Observer> observers;  
16.  
17.    privateString blog;  
18.  
19.    publicBlogger() {  
20.        observers = newArrayList<Observer>();  
21.    }  
22.  
23.    publicvoidaddObserver(Observer observer) {  
24.        observers.add(observer);  
25.    }  
26.  
27.    publicvoidremoveObserver(Observer observer) {  
28.        observers.remove(observer);  
29.    }  
30.  
31.    publicvoidnotifyObservers() {  
32.        for(Observer o : observers) {  
33.            o.update(blog);  
34.        }  
35.    }  
36.  
37.    // 发表新博客文章 
38.    publicvoidwriteNewBlog(String blog) {  
39.        this.blog = blog;  
40.        notifyObservers();  
41.    }  
42.  
43.  
44.  //邮件订阅者 
45.  publicclassEmailSubscriber implementsObserver {  
46.    publicvoidupdate(String blog) {  
47.        // 发送电子邮件 
48.    }  
49.  
50.  
51.  //RSS订阅者 
52.  publicclassRssSubscriber implementsObserver {  
53.    publicvoidupdate(String email) {  
54.        // 更新RSS信息 
55.    }  
56.

标签:observers,observer,Observer,对象,观察者,blog,Android,设计模式
From: https://blog.51cto.com/u_3124497/6910141

相关文章

  • Android NFC Mifare Tag 读写示例
    前面例子介绍了检测,读写NFCTAG开发的一般步骤,本例针对常用的MifareTag具体说明。MifareTag可以有1K,2K,4K,其内存分区大同小异,下图给出了1K字节容量的Tag的内存分布:数据分为16个区(Sector),每个区有4个块(Block),每个块可以存放16字节的数据,其大小为16X4X16=1024......
  • 关于Android流畅度不如iOS的几点看…
    关于Android流畅度不如iOS的几点看法网上一名据称是前谷歌实习生的人透露了一些关于Android系统硬件加速的内幕。据称,在Android3.0和4.0之前,并没有完整的硬件加速。他们一直在通过硬件加速绘制某些UI元素,并称效果并不像他们想象中那样乐观。他认为,Android效率低下的设计框......
  • Android应用开发的插件化 模块化
    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度。  由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒,使得开发一个灵活多变的程序,变得比较困难,不像pc平台下那么容易。  瞅瞅elipse的插件,瞅瞅360的插件,在an......
  • Android解耦(四)基于依赖注入的解耦
    安卓开发中基于依赖注入(DI)的模块解耦1.什么是依赖注入(DI)依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,简称IoC)。控制反转是指将对象之间的依赖关系由程序代码中定义转移到外部容器中管理,从而降低对象之间的耦合度,提高代码的可维护性和......
  • JDK 版本异常导致 flutter doctor --android-licenses 出错 (class file version 61.0
    flutterdoctor--android-licensesError:AJNIerrorhasoccurred,pleasecheckyourinstallationandtryagainExceptioninthread"main"java.lang.UnsupportedClassVersionError:com/android/sdklib/tool/sdkmanager/SdkManagerClihasbeencompil......
  • Android系统原理
    Android的系统架构可以分为四个层次:应用层、应用框架层、系统运行库层和Linux内核层。应用层 是直接面向用户的,包括各种应用程序和用户界面。应用框架层提供了各种API和服务,使得应用程序可以访问系统资源和功能。系统运行库层 提供各种系统库,包括C库、媒体库、图......
  • Spring中的设计模式详解
    Spring中的设计模式详解​JDK中用到了哪些设计模式?Spring中用到了哪些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于Spring中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各......
  • 创建型设计模式:工厂方法、简单工厂、抽象工厂
    1.前言设计模式,对于像java这种面向对象的语言来说,个人感觉是比较重要的。尤其在构建大型项目,设计模式的优点不言而喻。那么设计模式是什么?解决了软件工程中的什么问题?要想学一门东西,学一个知识点,我觉得首先得了解这个东西(知识、技术)它解决了什么问题,如果没有这门技术,那之前的做......
  • bitwarden 私有化部署android无法登陆问题解决
    安卓版bitwarden安装使用中登陆提示“发生错误。Exceptionmessage:java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.”这个错误是因为Bitwarden的证书文件中缺少中间证书导致安卓系统的证书校验异常解决方式,生成带证书链的证......
  • 设计模式-迭代器模式在Java中使用示例
    场景为开发一套销售管理系统,在对该系统进行分析和设计时,发现经常需要对系统中的商品数据、客户数据等进行遍历,为了复用这些遍历代码,开发人员设计了一个抽象的数据集合类AbstractObjectList,而将存储商品和客户等数据的类作为其子类AbstractObjectList类的子类ProductList和Custo......