結構型設計模式 裝飾模式

2021-10-04 09:41:53 字數 2195 閱讀 5343

先列舉乙個生活中的場景。假如我們買了一套房(買不起。。),但是是乙個毛胚房(指沒有任何裝修的房子),只能住。那麼我們為了讓房子變得溫馨舒適,就要進行裝修了,這樣沒有改變房子原本用來居住的功能,還增加了很多新的功能(比如做飯)。

那麼這一期的裝飾模式就是基於這樣的動機,在不改變原有功能的情況下新增新功能

那麼給乙個類或物件增加新的行為可以通過兩種方式來完成:

定義:動態的給乙個物件新增新的職責,就增加物件功能來說,比生成子類的方式要更加靈活。

模式結構圖:

說明:

抽象構件:

public

inte***ce

component

具體構建和抽象裝飾類

public

class

concretecomponent

implements

component

}public

class

decorator

implements

component

@override

public

void

show()

}

具體的裝飾類:

public

class

concretedecorator

extends

decorator

public

void

show()

}public

class

concretedecoratorb

extends

decorator

public

void

show()

}

測試:

public

class

decomain

}//執行結果

未裝飾前--

----

----

-我是目標物件。。。

開始裝飾。。。

第一次裝飾--

----

--我是目標物件。。。

增加新功能a。。。

第二次裝飾--

-------

我是目標物件。。。

新增第二個新功能。。。

裝飾兩次--

----

----

我是目標物件。。。

增加新功能a。。。

新增第二個新功能。。。

這裡舉了乙個簡單的例子,可以看出來裝飾模式的一些特點了。可以動態的增加新的功能,且容易控制新增新行為的時機。

優點

缺點

常見的使用場景

jlist list =

newjlist()

;jscrollpane jsp =

newjscrollpane

(list)

;

component target =

newconcretecomponent()

; component fist =

newconcretedecorator

(target)

; component sec =

newconcretedecoratorb

(target)

; component three =

newconcretedecoratorb

(fist);.

....

..

這個也好理解,就是多型的體現罷了。

concretedecorator  obj =

newconcretedecorator

(target)

; obj.

newmethod()

;//新增的方法

注意事項

結構型設計模式 裝飾模式

裝飾模式動態地給乙個物件新增一些額外的職責,就增加功能來說,它比生成子類更靈活。也可以這樣說,裝飾模式把複雜類中的核心職責和裝飾功能區分開了,這樣既簡化了複雜類,有去除了相關類中重複的裝飾邏輯。裝飾模式沒有通過繼承原有類來擴充套件功能,但卻達到了一樣的目的,而且比繼承更加靈活,所以可以說裝飾模式是繼...

設計模式 裝飾者模式 結構型

裝飾者模式 動態的給一些物件新增一些職能,就增加功能來說,裝飾者比生成子類更靈活。模型圖 public abstract class componentpublic class concretecomponet extends component public abstract class deco...

java結構型設計模式 裝飾模式

1 模式理解 這個模式還是很好理解的,裝飾嘛,就像我們裝修房子一樣,就是在原有的基礎上進行改進。結構模式就是被裝飾的類都統一實現乙個介面,裝飾類也實現這個介面,用來做裝飾的類統一繼承這個裝飾類。舉個例子,有乙個小男孩,裝飾一下,有乙個可愛的小男孩,可愛就是用來裝飾的,裝飾完之後小男孩還是小男孩,就是...