在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
裝飾模式的類圖
component為抽象構件,是乙個介面或抽象類,定義最核心的物件,也就是最原始物件;concretecomponent 為具體構件,是抽象構件的實現,需要裝飾的物件;decorator是裝飾角色,一般是乙個抽象類,它的屬性裡必然有乙個private變數指向component抽象構件;concretedecorator是具體裝飾角色,實現類decorator是實際裝飾類。
裝飾模式的通用原始碼
抽象構件
public
abstract
class
component
具體構件
public
class
concretecomponent
extends
component
}
抽象裝飾者
public
abstract
class
decorator
extends
component
//委託給被修飾者執行
@override
public
void
operate()
}
具體的裝飾類
public
class
concretedecorator1
extends
decorator
//定義自己的修飾方法
private
void
method1()
//重寫父類的operation方法
public
void
operate()
}
public
class
concretedecorator2
extends
decorator
//定義自己的修飾方法
private
void
method2()
//重寫父類的operation方法
public
void
operate()
}
注意:原始方法和裝飾方法的執行順序在具體的裝飾類是固定的,可以通過方法過載的方式實現多種執行順序場景類
public
class
client
}
12 裝飾模式
裝飾模式 動態地給乙個物件新增一些額外的職責 一般情況下可用繼承實現類的功能拓展 英雄抽象類 class abstracthero 具體英雄 蓋倫 class gailun public abstracthero void show status 給英雄新增裝飾物,他依舊還是個英雄 class ab...
設計模式之裝飾者模式12
有一次考試,小明考了60分,然後學校出了乙個成績單,要家長簽字。60分,王老漢肯定不簽字。這時,需要加兩個裝飾。1 最高分是70分,我考了60分。2 我排名從40到30名。學校給的報告單 public abstract class schoolreport 四年級真實的成績單 public clas...
《設計模式之禪》讀書筆記 12 裝飾模式
定義 裝飾模式可以動態地給乙個物件新增一些額外的職責。類圖 component抽象構件 component是乙個介面或者是抽象類,就是定義我們最核心的物件,也就是最原始的物件。concretecomponent具體構件 concretecomponent是最核心 最原始 最基本的介面或抽象類的實現。...