當前位置:
首頁 > 最新 > 介紹幾個簡單好用的Design Pattern

介紹幾個簡單好用的Design Pattern

介紹幾個簡單好用的Design Pattern

2018-6-23飛火連城

在面向對象程序設計中,有一些設計方法能讓類與類,對象與 對象,以及介面之間的通信、封裝,多態得到更好的實現。前輩總結出了一些特定的方法,稱為Design Pattern。下面將介紹幾種簡單又好用的Design Pattern。由於OOP語言多種多樣,因此不給出具體代碼。但是無論哪種語言,這些Design Pattern思想都是通用的。

一:Visitor

模式動機:有時我們希望同一個類對不同的被訪問類的訪問有不同的方法,相同的被訪問類對不同的訪問類也有不同的被訪問方法,這時可以使用Visitor Pattern

結構圖如下:

模式分析:具體的Visitor實現Visitor介面。只需維護Visitor介面即可實現對不同被訪問類的訪問。具體的Object類實現Object介面,通過裡面定義的Accept方法來與Visitor類通信。只需將this引用傳入傳入Object類的Visitor對象對應的訪問Object類方法即可實現相應的訪問。

模式評價:符合SRP,Visitor介面和Object介面各司其職。符合DIP,對抽象進行編程而不是對實現進行編程。但是難以實現OCP,當想拓展新的訪問對象方法時,務必會修改Visitor介面。

二 :Flyweight

模式動機:當創建大量細粒度對象時,由於對象間有極高的相似性,產生了大量對內存不必要的開銷。此時可以將細粒度對象的內部狀態定為Flyweight類對象將其加入Flyweightpool中,使用時根據外部環境進行引用即可。

結構圖如下

模式分析:設計時只需維護一個Flyweight介面,具體的Flyweight的操作方法根據外部環境override。用戶只需使用Flyweightpool里的getflyweight方法,通過key得到hashtable里的映射即可得到想要的Flyweight。該方法具體實現為先遍歷flyweightpool是否已含該key值flyweight,如果沒有,新添加一個Flyweight對象添加進flyweightpool再返回即可。

模式評價:Flyweight Pattern運用共享技術有效地支持大量細粒度對象的復用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次復用,它是一種對象結構型模式。其缺點是使得系統更加複雜,並且需要將Flyweight的狀態外部化,而讀取外部狀態使得運行時間變長。因此只有大量復用時才值得使用Flyweight Pattern,且常常結合靜態的Factory Pattern

三 :Decorator

模式動機:當用戶希望控制增加行為的方式和時機,我們可以將將一個類的對象嵌入另一個對象中,由另一個對象來決定是否調用嵌入對象的行為以便擴展自己的行為,實現動態拓展而非靜態。

結構圖如下:

模式分析:Decorator Pattern別名為Wrapper,Decorator類聚合一個它所裝飾的Component類的引用,把介面中定義的方法override為先引用聚合對象方法再拓展增加方法即可

模式評價:由於Association關係使系統具有較好的松耦合性,因此使得系統更加容易維護。當然,Association關係的缺點是比繼承關係要創建更多的對象。符合OCP,用戶可以根據需要增加新的Component類和具體Decorator類,在使用時再對其進行組合,原有代碼無須改變。但是,使用Decorator模式進行系統設計時將產生很多小對象,這些對象的區別在於它們之間相互連接的方式有所不同,而不是它們的類或者屬性值有所不同,同時還將產生很多具體Decorator類。這些Decorator類和小對象的產生將增加系統的複雜度,加大代碼理解的難度,且debug時很可能要逐級排查。

閱讀7

由秀米提供技術支持

舉報


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 智能電網溫馨小窩 的精彩文章:

TAG:智能電網溫馨小窩 |