設計模式(五) 裝飾模式

2021-09-24 00:27:36 字數 1932 閱讀 7074

什麼是裝飾模式?

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

一般而言,當系統需要實現新功能時候,我們會向舊的類中新增新的**以擴充套件其功能。我們將這種行為稱為對主類的裝飾,但這種做法的問題在於,在主類中增加了屬性和方法,從而增加了主類的複雜度。而且增加的這部分屬性只是為了滿足一些特定的場景下的特殊需求。而裝飾模式就很好的解決了這些問題,通過將裝飾的功能放在單獨的類中,並讓這個類包裝它要裝飾的物件,因此,當客戶需要新的功能時,就能在客戶**中有序的選擇呼叫裝飾物件。

由此可見,裝飾模式的優點就在於將類的核心職責和裝飾功能區分,簡化了原有的類。

裝飾模式類結構圖

**示例:

person 抽象類

/**

* * @author devinlei

*/public

abstract

class

person

裝飾抽象類 decorator , 繼承person

/**

* @author devinlei

*/public

class

decorator

extends

person

@override

public

void

show()

}}

裸奔者的具體實現類streaking ,繼承 person

/**

* @author devinlei

*/public

class

streaking

extends

person

}

具體裝飾類 pants ,繼承 decorator

/**

* @author devinlei

*/public

class

pants

extends

decorator

public

pants

(string shorts)

@override

public

void

show()

}

具體裝飾類 sleeve ,繼承decorator

/**

* @author devinlei

*/public

class

sleeve

extends

decorator

public

sleeve

(string color)

@override

public

void

show()

private

void

addcolor()

}

客戶測試類 customer

/**

* @author devinlei

*/public

class

customer

}

輸出結果:

穿短褲:七分褲

乙個光者腚的裸奔者

渲染為:黑色

uml類圖

實際應用案例

設計模式(五)裝飾模式

一 概念 特點 裝飾者和被裝飾者擁有相同的超型別 可能是抽象類也可能是介面 在裝飾類中包含乙個被裝飾元件類的物件引用 可以為被裝飾物件新增額外的功能 在裝飾類中重寫被裝飾元件類中的方法,並對被裝飾元件類中對應的方法呼叫 因為裝飾者和被裝飾者擁有相同的抽象型別,因此在任何需要原始物件 被包裝 的場合,...

(五)設計模式 裝飾模式

動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。人 concretecomponet定義了乙個具體的物件,也可以給這個物件新增職責。服飾 裝飾抽象類,繼承componet,從外類來擴充套件componet類的功能,但對於componet來說,是無需知道decorato...

設計模式(五)裝飾器模式

設計模式專欄 裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。我們通過下面的例項來演示裝...