顧名思義,這個模式就是用來觀察的,形成一種觀察的關系後,當這個對象的狀态改變,其他所有的觀察者都會有所回報
開始舉🌰,比如最近很火的搶口罩!!
當所有人都訂閱觀察一款口罩的存貨資訊,口罩有存貨後會給每個使用者發消息,然後使用者就可以來搶購了,這就是觀察者模式,上代碼:
/**
* 定義觀察者的接口
*/
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了