2016 12 15學習日記 裝飾者模式

2021-07-25 10:17:34 字數 2113 閱讀 2937

昨晚事情實在太多,沒來得及更新。今天要學習的是裝飾者模式(deocorator pattern).

裝飾者模式定義:裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

裝飾模式包含如下角色:

1.component (抽象構件)

2.concretecomponent(具體構件)

3.decorator(抽象裝飾類)

4.concretedecorator(具體裝飾類)

類圖

(1) 裝飾物件和真實物件有相同的介面。這樣客戶端物件就能以和真實物件相同的方式和裝飾物件互動。

(2) 裝飾物件包含乙個真實物件的引用(reference)

(3) 裝飾物件接受所有來自客戶端的請求。它把這些請求**給真實的物件。

(4) 裝飾物件可以在**這些請求以前或以後增加一些附加功能。這樣就確保了在執行時,不用修改給定物件的結構就可以在外部增加附加的功能。在物件導向的設計中,通常是通過繼承來實現對給定類的功能擴充套件。

例項:某系統提供了乙個資料加密功能,可以對字串進行加密。最 簡單的加密演算法通過對字母進行移位來實現,同時還提供了稍 複雜的逆向輸出加密,還提供了更為高階的求模加密。使用者先 使用最簡單的加密演算法對字串進行加密,如果覺得還不夠可 以對加密之後的結果使用其他加密演算法進行二次加密,當然也 可以進行第三次加密。現使用裝飾模式設計該多重加密系統。

類圖:

抽象構建類 cipher

public abstract class cipher

具體構件類 simphercilpher

public class ******cipher : cipher

if (c >= 'a' && c <= 'z')

str += c;

}return str;}}

抽象裝飾類 cipherdecorator

class cipherdecorator : cipher

public override string encrypt(string plaintext)

}

具體裝飾類 complexcipher

class complexcipher : cipherdecorator

public override string encrypt(string plaintext)

private string reverse(string text)

return str;}}

具體裝飾類 advancedcipher

class advancedcipher :cipherdecorator

public override string encrypt(string plaintext)

public string mod(string text)

return str;}}

program.cs

class program

}

優點:裝飾這模式和繼承的目的都是擴充套件物件的功能,但裝飾者模式比繼承更靈活,並且有很好地可擴充套件性

通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可以創造出很多不同行為的組合

缺點:

裝飾者模式會導致設計中出現許多小物件,如果過度使用,會讓程式變的更複雜。並且更多的物件會是的差錯變得困難,特別是這些物件看上去都很像。

使用場景:

需要擴充套件乙個類的功能或給乙個類增加附加責任。

需要動態地給乙個物件增加功能,這些功能可以再動態地撤銷。

需要增加由一些基本功能的排列組合而產生的非常大量的功能

感覺始終理解不是很深,忘得也快,這該怎麼辦啊~~~~~1

python學習日記(函式 裝飾器)

前提,我有一段 乙個函式 import time defrun time time.sleep 0.1 print 我曾踏足山巔 需求1 現在,我想計算這段 的執行時間。我可以這樣做 import time defrun time start time time.time time.sleep 0....

裝飾者模式學習記錄

裝飾者應用場景 擴充套件乙個類的功能或給乙個類新增附加職責 優點 1.不改變原有物件的情況下給乙個物件擴充套件功能 2.使用不同的組合可以實現不同的效果 3.符合開閉原則 注意 在新的裝飾器中要呼叫原來的方法 否則是不正確的 public class decorator inte ce compon...

裝飾者模式 HeaderFirst學習筆記

1 裝飾者模式定義 動態的將責任附加到物件上,想要擴充套件功能,裝飾者提供有別於繼承的另外一種選擇。2 裝飾者模式精髓 2.1對擴充套件開放,對修改關閉 2.2繼承屬於擴充套件形式之一,但不見得是達到彈性設計的最佳方案 2.3設計應該允許行為被擴充套件而無需修改現有 2.4裝飾者意味著一群裝飾者類,...