介紹幾個簡單好用的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:智能電網溫馨小窩 |