1旗国、觀察者模式(Observer Pattern)
使用場(chǎng)景:
BroadCast 監(jiān)聽系統(tǒng)廣播或者程序內(nèi)部自己發(fā)送的廣播
EventBus 廣播原理一樣
LiveData 數(shù)據(jù)更新通知觀察者
Adapter 中數(shù)據(jù)變化時(shí)辨泳,notifyDataSetChange
2、適配器模式(Adapter Pattern)
把一個(gè)類的接口轉(zhuǎn)換為另一個(gè)類期待的接口類型赎离,從而是接口不匹配的兩個(gè)類兼容工作
ListView RecycleView使用適配器模式忙芒,通過創(chuàng)建適配器侣颂,讓數(shù)據(jù)正確的供RecycleView使用
3、代理模式(Proxy Pattern)
為當(dāng)前類提供一個(gè)代理類給其他類訪問淤年,以防止當(dāng)前類直接暴露出去。
Activity的管理者是ActivityManager蜡豹,但最終的管理者為ActivityManagerService(AMS)麸粮,在Android7.0及以前版本中,ActivityManager通過調(diào)用ActivityManagerProxy進(jìn)行一些操作镜廉,而ActivityManagerProxy會(huì)調(diào)用AMS弄诲,真正的工作是由AMS來完成的。()
http://www.reibang.com/p/30ed35c06bba
4娇唯、工廠模式(Factory Pattern)
給外部提供一個(gè)統(tǒng)一創(chuàng)建特定對(duì)象的類齐遵,降低創(chuàng)建對(duì)象的復(fù)雜性。
Android中的BitmapFactory支持用不同的方式創(chuàng)建Bitmap對(duì)象塔插。
5梗摇、單例模式(Singleton Pattern)
進(jìn)程中只創(chuàng)建一個(gè)實(shí)例。Android8.0以上版本,IActivityManager和IActivityTaskManager實(shí)例都是單例想许,使用了系統(tǒng)的單例實(shí)現(xiàn)伶授,不過看源碼并沒有使用所謂的什么高效的實(shí)現(xiàn)方式,直接把鎖加到了獲取實(shí)例的地方:
public final T get() {
synchronized (this) {
if (mInstance == null) {
mInstance = create();
}
return mInstance;
}
}
6流纹、命令模式(Adapter Pattern)
把請(qǐng)求封裝成一個(gè)對(duì)象糜烹,從而把不同的客戶端參數(shù)化。
Handler使用了命令模式漱凝,客戶端通過sendMessage()發(fā)送命令
7疮蹦、裝飾者模式(Decorator Pattern)
動(dòng)態(tài)的給對(duì)象添加一些額外的職責(zé)
Context體系使用了裝飾者,Context是抽象組件茸炒,ContextImpl是具體的組件愕乎,而ContextWrapper是裝飾者阵苇,通過擴(kuò)展ContextWrapper功能,實(shí)現(xiàn)Activity妆毕、Service等子類
http://www.reibang.com/p/6658cfd26b22
http://www.reibang.com/p/df1a96c5c046
8慎玖、責(zé)任鏈模式
一條請(qǐng)求沿著一條鏈挨個(gè)兒傳遞,直到有對(duì)象處理它為止笛粘。
Android中UI時(shí)間傳遞使用了責(zé)任鏈模式
OkHttp的攔截器也是使用責(zé)任鏈模式
9趁怔、建造者模式(Builder Pattern)
將一個(gè)復(fù)雜對(duì)象的創(chuàng)建和表示分離,使用相同的構(gòu)建過程創(chuàng)建不同的對(duì)象薪前。
AlertDialog使用了建造者模式润努。