溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

設(shè)計模式一句話與實戰(zhàn)應(yīng)用總結(jié)

發(fā)布時間:2020-07-17 02:01:41 來源:網(wǎng)絡(luò) 閱讀:496 作者:星恒Android 欄目:移動開發(fā)
訪問者模式
一句話

實現(xiàn)了訪問者和被訪問者分離,靈活且擴(kuò)展性強(qiáng);但違背了迪米特和依賴倒轉(zhuǎn)原則,被訪問元素若修改影響較大。

細(xì)節(jié)

雙分派技術(shù)(雙動態(tài)綁定)
訪問者的角色由它的實現(xiàn)對象確定
被訪問的角色也由它的具體對象決定

應(yīng)用場景

源碼:注解的解釋器
員工給不同管理者查看的報表
病人、抓藥人、醫(yī)生、定價者面對藥店不同藥物所做的想法或操作

中介者模式
一句話

加入中介類來改變對象關(guān)系,使網(wǎng)狀結(jié)構(gòu)變?yōu)樾切徒Y(jié)構(gòu),多對多變?yōu)橐粚Χ唷?yīng)用于對象關(guān)系較為復(fù)雜的情況。

應(yīng)用場景

源碼:binder driver和service manager;keyGuardViewMediator;
主板和電源、cpu等關(guān)系
總經(jīng)理和諸多部門
Activity中view、model、邏輯交互

外觀模式
一句話

和中介者類似,加入中間類形成統(tǒng)一編程接口,區(qū)別在于不是為了改變對象關(guān)系,而是把多個功能封裝為api以供調(diào)用。

應(yīng)用場景

源碼:Context
插件化動態(tài)加載(ActivityProxy)
sdk封裝
框架封裝(OKHttp,Piccaso)

組合模式
一句話

通過多層繼承和實現(xiàn)相同方法組合模型,用于控制樹形結(jié)構(gòu)。但通常需要進(jìn)行類型判斷,增加代碼復(fù)雜度。

細(xì)節(jié)

安全的組合模式:由子組合完成抽象方法(ViewGroup),外界使用需要判斷view或viewGroup,使用不方便。
透明組合模式:根節(jié)點、枝干節(jié)點、葉節(jié)點都有相同的抽象方法,對外界透明,使用方便不安全。

應(yīng)用場景

源碼:ViewGroup View
文件夾和文件

適配器模式
一句話

通過適配接口進(jìn)行兼容處理,通常后期使用,避免過度適配;靈活使用可以增加擴(kuò)展和復(fù)用性(系統(tǒng)adapter)。

細(xì)節(jié)

對象適配器:適配目標(biāo)為接口,適配器中傳入被適配對象,通過適配目標(biāo)接口進(jìn)行轉(zhuǎn)換處理。
類適配器:適配目標(biāo)為抽象父類,通過擴(kuò)展子類實現(xiàn)相同方法實現(xiàn)方法兼容。

應(yīng)用場景

源碼:adapter
電源轉(zhuǎn)換

裝飾者模式
一句話

利用裝飾者類重復(fù)傳入裝飾對象,可以隨意增減裝飾方法。替代繼承方式解決類膨脹問題,擴(kuò)展性極強(qiáng)。

應(yīng)用場景

源碼:ContextWrapper
餐館混搭
奶茶混搭

狀態(tài)模式
一句話

抽象狀態(tài)對象使得行為在不同狀態(tài)下都能產(chǎn)生變化。

應(yīng)用場景

源碼:wifi管理
登錄狀態(tài)
家電控制狀態(tài)
下載狀態(tài)管理

模板模式
一句話

定義算法框架,使子類不改變結(jié)構(gòu)的情況下改變行為。

應(yīng)用場景

源碼:AsynTask、Activity生命周期
adapter-holder
draw流程
Activity Init三板斧

備忘錄模式
一句話

在該對象之外保存該對象的內(nèi)部狀態(tài)

應(yīng)用場景

源碼:saveInstanceState,事務(wù)回滾
游戲保存讀取
記事本狀態(tài)恢復(fù)

享元模式
一句話

使用共享對象(對象池)實現(xiàn)對象的復(fù)用,需要分離內(nèi)部狀態(tài)和外部狀態(tài),可以大大節(jié)約內(nèi)存。

應(yīng)用場景

源碼:handleMessage消息池復(fù)用;線程池
建立tcp消息池
車票系統(tǒng)車次信息池

命令模式
一句話

封裝命令對象傳遞請求給調(diào)用者,分離請求者和接收者,會增加大量的類,但是職責(zé)分明,高內(nèi)聚,非常靈活容易擴(kuò)展,可作為回調(diào)的替代。

應(yīng)用場景

源碼:Packagemanager的安裝、移動、測量命令(內(nèi)部類HandlerParams子類實現(xiàn));
畫筆應(yīng)用
記事本應(yīng)用

解釋模式
一句話

使用不同解釋器對特定語言進(jìn)行解析,對簡單語法適應(yīng)較好,易于擴(kuò)展,無法對應(yīng)復(fù)雜文法(如有順序的四則運算)。

應(yīng)用場景

源碼:清單文件解析parseActivity
簡單計算

責(zé)任鏈模式
一句話

發(fā)送請求給一個對象鏈條,該鏈條每個對象和它的下一對象綁定,實現(xiàn)發(fā)起者與最終接手者的解耦

應(yīng)用場景

源碼:事件分發(fā)
廣播的有序機(jī)制改進(jìn)為責(zé)任鏈廣播
公司各種權(quán)限的逐級申請
繼承制度

設(shè)計模式異同對比

裝飾者VS代理模式

裝飾模式用作功能擴(kuò)展,可以給相同對象不斷增加新的特征;代理模式則偏向行為控制,在方法執(zhí)行前后做處理。

狀態(tài)模式vs策略模式

策略模式封裝可變更的算法解耦;狀態(tài)模式通過改變狀態(tài)控制行為。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI