設計模式回顧:策略模式、代理模式、裝飾者模式的區別


前言

設計模式有很多,但設計模式的目的是一致的,都是為了提升代碼的可讀性和可擴展性。設計模式都遵循一些基本的原則,設計模式是為了遵循這些原則而創造的工具。

- 單一職責原則:就一個類而言,應該僅有一個引起它變化的原因。這一點是說,如果有一些類過於臃腫,承擔了過多的職責,就應當分解他。

- 開放-封閉原則:軟件實體(類、模塊、函數等)應該可以擴展,但是不可修改。這一點是說,拒絕硬編碼,拒絕直接修改原有代碼。

- 依賴倒轉原則:高層模塊不應該以來低層模塊。兩個都應該以來抽象。抽象不應該依賴細節。細節應該依賴抽象。這一點是說,應該使用面向接口編程。

這些原則是程序員在協同工作中達成的共識,就算大家從來沒有學習過什么設計模式,只要能遵循這些原則,也許你自己已經使用了某些設計模式。

 

有三個模式我以前學習的時候很混淆,他們是策略模式、代理模式、裝飾者模式。混淆的原因是,這三個模式都是在 輔助類中持有一個目標類的對象,通過操作這個目標對象,完成實際任務。

在工作中具體場景下深入思考以后,我終於對他們有了進一步的理解。

首先來看策略模式,uml類圖如下

策略模式通過將一些易變的計算抽象為策略實體,通過多態,讓實際調用者盡可能的不用感知這種變化。

 

再看代理模式

 

代理模式與策略模式不同的是,代理類必須和被代理類具有相同的父類或接口,即代理類要么繼承或實現被代理類的父類,要么直接計程被代理類本身。這兩種情況分別對應java的jdk代理和cglib代理實現。

代理模式不是為了封裝變化,而是為了隱藏實際執行者本身。

 

最后是裝飾者模式

裝飾者模式和策略模式的不同在於,原有類和裝飾器類必須繼承同一個父類。裝飾器對象除了需要完成持有對象的操作外,還有一些附加操作,這些附加操作隨着裝飾器的不同而變化。持有對象本身的操作是主體,裝飾器的操作是補充。而策略模式中,具體策略才是主體。


免責聲明!

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



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