天天看點

徹底明白Android設計模式—觀察者模式(釋出-訂閱模式)

顧名思義,這個模式就是用來觀察的,形成一種觀察的關系後,當這個對象的狀态改變,其他所有的觀察者都會有所回報

開始舉🌰,比如最近很火的搶口罩!!

當所有人都訂閱觀察一款口罩的存貨資訊,口罩有存貨後會給每個使用者發消息,然後使用者就可以來搶購了,這就是觀察者模式,上代碼:

/**
     * 定義觀察者的接口
     */
    public interface Observer {
        public void notifyMsg(String msg);
    }

    /**
     * 定義買口罩的使用者類
     */
    public class BuyUser implements Observer {

        @Override
        public void notifyMsg(String msg) {
            //收到口罩有貨的消息就去搶購
        }
    }

    /**
     * 定義口罩的接口
     */
    public interface observable {
        public void addBuyUser(BuyUser user);

        public void deleteBuyUser(BuyUser user);

        public void notify(String msg);
    }

    /**
     * 定義被觀察類,口罩
     */
    public class Mask implements observable {

        List<BuyUser> mUserList = new ArrayList();

        @Override
        public void addBuyUser(BuyUser user) {
            mUserList.add(user);
        }

        @Override
        public void deleteBuyUser(BuyUser user) {
            mUserList.remove(user);
        }

        @Override
        public void notify(String msg) {
            for (BuyUser user : mUserList) {
                user.notifyMsg(msg);
            }
        }
    }
           

這裡定義了觀察者(買口罩的使用者)以及被觀察類(口罩商品),并且定義了相應的接口,

然後具體使用情況呢,就是 口罩到貨——通知使用者

上代碼:

public  void main() {
        Mask mask=new Mask();
        mask.addBuyUser(new BuyUser());
        mask.addBuyUser(new BuyUser());
        mask.addBuyUser(new BuyUser());
        mask.notify("口罩有貨啦");
    }
           

mask調用notify方法後,每個具體的使用者就能收到口罩有貨的消息了,然後就可以進行購買等一系列操作。是不是很簡單

在Android中的應用

其實大家常寫的Activity管理類就是這種設計模式,Activity管理類怎麼設計的?

每運作一個Activity,就把Activity的執行個體加入ActivityManager,然後可以統一管理,進行銷毀或者其他操作,就相當于通過這個管理類通知到每個Activity了