裝飾器模式的定義
裝飾器模式的應用場景
用於擴充套件乙個類的功能,或者給乙個類新增附加職責。
動態地給乙個物件新增功能,這些功能可以再動態地被撤銷。
需要為一批平行的兄弟類進行改裝或加裝功能。
裝飾器模式主要包含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...
裝飾器模式
一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...