大話設計之裝飾模式

2021-06-21 22:03:08 字數 1694 閱讀 2322

裝飾模式:動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

設計原則:

1. 多用組合,少用繼承

利用繼承設計子類的行為,是在編譯時靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件。

2. 類應設計的對擴充套件開放,對修改關閉。

裝飾模式是對物件進行包裝,這樣每個裝飾物件的實現就能和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心如何被新增到對項鍊中!

關於「小菜」穿著的例項,通過裝飾模式可以為小菜增加好多的服飾種類,而且可以進行多種排列組合,這也許是裝飾模式的精髓吧。

下面僅僅是一部分**:

static void main(string args)

}class person

private string name;

public person(string name)

public virtual void show()

", name);}}

class finery : person

public override void show()}}

class tshirts : finery

}class bigtrouser : finery

特點:

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

(2) 裝飾物件包含乙個真實物件的引用(reference)(例項中的person)。

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

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

繼承來實現對給定類的功能擴充套件。

優點:

1. decorator模式與繼承關係的目的都是要擴充套件物件的功能,但是decorator可以提供比繼承更多的靈活性。

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

缺點:

1. 這種比繼承更加靈活機動的特性,也同時意味著更加多的複雜性。

2. 裝飾模式會導致設計中出現許多小類,如果過度使用,會使程式變得很複雜。

3. 裝飾模式是針對抽象元件(component)型別程式設計。但是,如果你要針對具體元件程式設計時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變component介面,增加新的公開的行為,實現「半透明」的裝飾者模式。在實際專案中要做出最佳選擇。

大話設計模式之裝飾模式

概念 動態給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。結構圖 解析 component類 定義乙個物件介面,可以給這些物件動態新增職責 方法 concretecomponent類 定義了乙個具體的物件,也可以給這個物件新增職責。decorator類 裝飾抽象類,繼承 com...

大話設計模式之裝飾模式

定義 分離類的職責,讓裝飾和主類分離,好處 利用setcomponent來物件進行包裝,這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心被如何新增到物件鏈中 有效的把類的核心職責和裝飾功能分開了,而且可以去除相關類中複雜的裝飾邏輯。例子 服飾類繼承人類,先...

大話設計模式之裝飾者模式

通過閱讀本篇文章,可以給喜歡使用繼承的開發人員提供一種新的思路。我們將會了解濫用繼承帶來的不良後果,同時也會介紹比繼承更合理的實現方式。利用繼承設計子類的行為,是在編譯時期靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件...