Android開發中常見的設計模式 MD


Markdown版本筆記 我的GitHub首頁 我的博客 我的微信 我的郵箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目錄

值得收藏的一些文章

---------- 創建型模式 - 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM