Markdown版本筆記 | 我的GitHub首頁 | 我的博客 | 我的微信 | 我的郵箱 |
---|---|---|---|---|
MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目錄
---------- 創建型模式 - 6個 ----------
- 單例模式
- 建造者模式
- 原型模式
- 工廠模式3個
---------- 行為型模式 - 11個 ----------
- 策略模式
- 觀察者模式
- 模板方法模式
- 責任鏈模式
- 備忘錄模式
- 命令模式
解釋器模式
迭代器模式
狀態模式
中介者模式
訪問者模式
---------- 結構型模式 - 7個 ----------
- 裝飾器模式
- 組合模式
- 代理模式
- 適配器模式
- 門面模式
- 亨元模式
橋接模式
值得收藏的一些文章
- 一篇超實用博客:Android開發中常見的設計模式
- 四月葡萄的系列文章
- xxq2dream的系列文章
- Android設計模式之23種設計模式一覽
- Android設計模式簡單理解
- android源碼中的設計模式
---------- 創建型模式 - 6個 ----------
- 單例模式
懶漢式、餓漢式、靜態內部類、雙重鎖檢查、枚舉
- 建造者模式
最明顯的標志就是使用Build類
AlterDialog、Notification
各大開源框架廣泛使用 Gson、Okhttp
- 原型模式
更快的獲取到一個相同屬性的對象
Intent、OkHttpClient
- 工廠模式3個
簡單工廠(靜態工廠)、工廠方法、抽象工廠
BitmapFactory、MediaPlayerFactory、Executors線程池工廠類
---------- 行為型模式 - 11個 ----------
- 策略模式
封裝算法
出行策略:公交車、的士、自駕策略下的費用、時間計算等
插值器、估值器、緩存策略,增刪改查策略
- 觀察者模式
監聽器、點擊事件、滾動事件
rxjava、eventbus、廣播
架構組件Livedata
- 模板方法模式
定義算法的骨架、結構、流程,細節由子類實現
Activity生命周期
BaseFragment里面定義的getLayout、initView、懶加載onLazyLoad
- 責任鏈模式
需要指定處理鏈,屏蔽了請求的處理過程,客戶端不需要知道請求會被哪些對象處理
事件分發機制、有序廣播、審批流程
ClassLoader的雙親委托模型
- 備忘錄模式
捕獲一個對象的內部狀態,並在該對象之外保存,以便需要時恢復到原先保存的狀態
Activity的onSaveInstanceState,保存Bundle類型的savedInstanceState,當Activity重建時可以恢復狀態
- 命令模式
將來自客戶端的請求封裝為一個獨立的對象,將行為請求者與行為實現者解耦,可以實現對請求進行排隊、撤消、記錄請求日志等
Handler機制,Runnable、Callable等接口的設計
廣播、eventbus
解釋器模式
正則表達式Pattern
時間格式化Format、Html格式化、Integer.parseInt解析、SQL解析
解釋加減乘除、或與非
迭代器模式
把對容器中包含對象的訪問委讓給外部類,使用Iterator按順序進行遍歷訪問
比如至少提供hasNext()和next()方法
所有的集合都有 Iterator iterator() 方法
狀態模式
根據內部的狀態動態的選擇行為;狀態改變的時候會改變其行為;狀態改變的時候其行為也隨之改變
把所研究的對象的行為包裝在不同的狀態對象里
登錄狀態、未登錄狀態下用戶的行為
中介者模式
房屋中介
將網狀結構轉化成星型結構,可以避免同事類之間的過度耦合
同事對象只知道中介者而不知道其他同事對象,同事類之間必須通過中介者才能進行消息傳遞
訪問者模式
相對比較復雜的一個,項目中可能見得非常少。
把數據結構和作用於結構上的操作解耦合,適用於數據結構穩定、算法易變的系統
案例:領導(CEO、CTO、Leader)對員工(程序員、產品、測試)進行考核
---------- 結構型模式 - 7個 ----------
- 裝飾器模式
擴展功能,相比於繼承基類來擴展功能,使用裝飾器模式更加的靈活
解決類膨脹、類爆炸、繼承體系臃腫的問題
Context和它的包裝類ContextWrapper(其實並沒有增強功能)
IO流中的BufferReader
- 組合模式
View和ViewGroup的組合、文件結構File
集合List的add和addAll
樹、遞歸、葉子結點
- 代理模式
AIDL、Binder
靜態代理、動態代理
Proxy、Cglib
ActivityManagerProxy代理ActivityManagerService
- 適配器模式
listview、recycleview、ViewPage
流類型轉換InputStreamReader、OutputStreamWriter
集合和數組類型轉換 Arrays.asList()
- 門面模式
醫院的接待、功能的封裝(工具類)
Context與ContextImpl
- 亨元模式
String常量池、Integer、Message常量池
享元對象能做到共享的關鍵是區分內部狀態和外部狀態
一般需要用到單例模式、工廠模式、HashMap
降低內存中對象的數量,節省內存,但使系統將變得復雜,且在讀取外部狀態時耗時增加
橋接模式
車的輪胎,人的衣服
業務抽象角色引用業務實現角色,業務抽象角色的部分實現是由業務實現角色完成的
將一個系統的抽象部分和實現部分分離,使它們都可以獨立地進行變化
Window 與 WindowManager、應用層與Native層之間的交互
2019-4-1