Android 订阅-发布者模式-详解
2015-09-14 15:38
357 查看
1.概念简述
Android 简称观察者模式, GoF说道:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。有两个重要概念:
1.1发布者:把所有观察者对象的引用保存在一个聚焦里,每一个发布者都可以有任何数量的观察者,发布者提供一个接口,可以增加和删除订阅者
1.2订阅者:得到发布者的通知,更新状态,使之与发布者的状态相协调
2.实例
在Android开发中常用的功能就是关注了,如淘宝关注店铺,商品,新浪微博中关注某一个明星,时时通知关注明星的微博发布,而这个逻辑结构就是订阅-发布者模式.业务:一个用户关注某一个商品
2.1.创建一个发布者-商品
public class Good extends Observable { public String getmGoodName() { return mGoodName; } public void setmGoodName(String mGoodName) { setChanged(); this.mGoodName = mGoodName; } public Integer getmGoodPrice() { return mGoodPrice; } public void setmGoodPrice(Integer mGoodPrice) { setChanged(); this.mGoodPrice = mGoodPrice; } public Good(String mGoodName, Integer mGoodPrice) { this.mGoodName = mGoodName; this.mGoodPrice = mGoodPrice; setChanged(); } private String mGoodName = null; private Integer mGoodPrice =null;} |
public class User implements Observer{ private String name; private String msg; @Override public void update(Observable observable, Object data) { System.out.println("good"); System.out.println(name+"价格为:"+msg); } public User(String name, String msg) { this.name = name; this.msg = msg; } public static void main(String[] args) { System.out.println("init now"); Good good1 = new Good("Mi1",7); Good good2 = new Good("Mi2",8); User user1 = new User("Boss1","Hello"); User user2 = new User("Boss2","Hello"); good1.addObserver(user1); good1.addObserver(user2); good2.addObserver(user1); good2.addObserver(user2); good1.notifyObservers(); } } |
思考:
在上述的代码中存在这样的问题,在Android实现中,使用这样的代码实现,尤其是在联网获取数据时,需要使用线程,或启动后台服务,这也是在实际开发中需要实践的问题,并用当订阅者过多时,操作更加缓慢,如何解决也是需要思考的问题。这些问题,在Android GreenRobot EventBus以及 Google Lib guava 也提供了实现。如何解决的可以参考
参考资料:
[1]:大话设计模式
[2]:Observable与Observer
相关文章推荐
- Android内存泄露案例分析
- android 中如何限制 EditText 最大输入字符数
- Android禁止ViewPager的左右滑动
- 《Android开发艺术探索》图书勘误
- 大话Philm的从无到有(一)诞生篇
- Android开发实践:编译VLC-for-android
- [Android Tools] Android Killer V1.2正式版 发布信息
- 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
- 阅读《Android 从入门到精通》(6)——按钮
- Android底部菜单栏(tabhost实现)
- Android DrawerLayout的使用
- android中svg文件的使用
- ActionBar SearchView空指针异常
- Android第四十九期 - 仿QQ空间上传功能+本地数据库存储
- 腾讯Bugly干货分享:Android机型适配之痛
- Android自定义ImageView,方角,圆角头像(可根据自己的需求来设定头像的圆角或者方角的大小)
- 开源分享三(炫酷的Android Loading动画)
- Vlc-for-android源码分析
- VLC for Android源码下载和编译
- fragment 获取 context