裝飾器模式

2021-10-19 05:54:25 字數 2639 閱讀 5782

裝飾器模式的定義

裝飾器模式的應用場景

用於擴充套件乙個類的功能,或者給乙個類新增附加職責。

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

需要為一批平行的兄弟類進行改裝或加裝功能。

裝飾器模式主要包含4個角色

抽象元件(component):可以是乙個介面或者抽象類,充當被裝飾類的原始物件,規定了被裝飾物件的行為。

具體元件(concretecomponent):實現/繼承component的乙個具體物件,即被裝飾物件。

抽象裝飾器(decorator):通用的裝飾concretecomponent的裝飾器,其內部必然有乙個屬性指向component;其實現一般是乙個抽象類,主要為了讓其子類按照其構造形式傳入乙個component,這是強制的通用行為。如果系統中裝飾邏輯單一,則並不需要實現許多裝飾器,可以直接省略該類,而直接實現乙個具體裝飾器即可。

具體裝飾器(concretedecorator):decorator的具體實現類,理論上,每個concretedecorator都擴充套件了component物件的一種功能。

實現原理

裝飾器模式的實現原理是,讓裝飾器實現與被裝飾類(例如concretecomponent)相同的介面(例如component),使得裝飾器與被擴充套件類型別一致,並在建構函式中傳入該介面物件,然後在實現這個介面的被包裝類物件的現有功能上新增新功能。由於裝飾器與被包裝類屬於同一型別(均為component),且建構函式的引數為其實現介面類(component),因此裝飾器模式具備巢狀擴充套件功能,這樣就能使用裝飾器模式一層一層地對底層被包裝類進行功能擴充套件了。

示例

package com.liguogang.decoratorpattern;

/*** @description: 抽象元件 component

* @author: liguogang

* @date: 2021/2/6 9:36

*/public

abstract

class

component

package com.liguogang.decoratorpattern;

/*** @description: 具體元件 concretecomponent

* @author: liguogang

* @date: 2021/2/6 9:38

*/public

class

concretecomponent

extends

component

}

package com.liguogang.decoratorpattern;

/*** @description: 抽象裝飾器 decorator

* @author: liguogang

* @date: 2021/2/6 9:41

*/public

abstract

class

decorator

extends

component

@override

public

void

operation()

}

package com.liguogang.decoratorpattern;

/*** @description: 具體裝飾器a concretedecoratora

* @author: liguogang

* @date: 2021/2/6 9:49

*/public

class

concretedecoratora

extends

decorator

private

void

beforeoperation()

private

void

afteroperation()

@override

public

void

operation()

}

package com.liguogang.decoratorpattern;

/*** @description: 具體裝飾器b concretedecoratorb

* @author: liguogang

* @date: 2021/2/6 9:49

*/public

class

concretedecoratorb

extends

decorator

private

void

beforeoperation()

private

void

afteroperation()

@override

public

void

operation()

}

package com.liguogang.decoratorpattern;

public

class

test

}

裝飾器模式

大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...

裝飾器模式

裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...

裝飾器模式

一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...