• Android 订阅-发布者模式-详解


    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;}

    2.2.创建一个订阅者-用户

    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]:ObservableObserver

  • 相关阅读:
    #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;
    【NOIP合并果子】uva 10954 add all【贪心】——yhx
    NOIP2010普及组T4 三国游戏——S.B.S.
    NOIP2010普及组T3 接水问题 ——S.B.S.
    NOIP2011提高组 聪明的质监员 -SilverN
    NOIP2010提高组 关押罪犯 -SilverN
    uva 1471 defence lines——yhx
    json2的基本用法
    获取对象的属性个数
    替换指定规则的字符串
  • 原文地址:https://www.cnblogs.com/orangebook/p/4807321.html
Copyright © 2020-2023  润新知