設計模式 四 之裝飾者模式

2022-07-07 06:33:11 字數 1468 閱讀 2134

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

component是定義乙個物件介面,可以給這些物件動態的新增職責。concretecomponent是定義了乙個具體的物件,可以給這個物件新增乙個職責。decorator,裝飾抽象類,繼承了component,從外類拓展了component類的功能,但是對於component類無需知道decorator的存在,concretedecorator就是具體的裝飾物件,起到給component新增功能的作用。

也就是說,component類是被裝飾的抽象類,decorator類是裝飾component的抽象類。decorator抽象類是繼承了component類,並且給component類增加了一些額外的功能,但是不影響原本component物件。decorator類就像給component類增加了一件衣服,增加了一些裝飾品,所以就叫做裝飾模式。

進一步解釋,說明這個裝飾者模式是一層一層的進行裝飾。裝飾的過程是首先新建乙個concretecomponent物件,然後新建concretedecorator1類,用來裝飾concretecomponent類。然後第二次新建concretedecorator2類裝飾concretedecorator1類....concretedecoratornm類。 不停的進行這樣裝飾新增新的功能。執行的時候就在concretedecoratornn就可以載入所裝飾的類的具體功能,也可以執行其中裝飾過程中的所實現的功能,方法較為靈活。

而且裝飾類可以一層套一層,不停的新增新的功能和職責。

public class decoratordemo 

}// person類,可以實現具體的類

class person

public person(string name)

public void show()

}// 服裝裝飾類

class finery extends person

@override

public void show() }

}// 具體的裝飾類

class tshirts extends finery

}class bigtrouser extends finery

}

裝飾者模式是為已有的功能動態的新增更多的功能的一種方式

裝飾者模式把每個裝飾的功能放置在單獨的類中,並且讓這個類包裹了它所要裝飾的類,因此需要執行特殊的行為時,客戶**就可以在執行時要選擇的、按照順序地使用裝飾功能包裝物件。

把類中的裝飾從類中搬除,簡化原來的類

有效的把類的核心職責和裝飾功能區域分割開來,去除重複的邏輯

裝飾(decorator)模式的主要優點有:

其主要缺點是:裝飾模式會增加許多子類,過度使用會增加程式得複雜性。

裝飾模式主要包含以下角色。

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...