設計模式之裝飾器模式

2021-08-20 11:17:11 字數 1120 閱讀 1955

裝飾模式(decorator)

顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,關係圖如下:

source類是被裝飾類,decorator類是乙個裝飾類,可以為source類動態的新增一些功能,**如下:

1. public inte***ce sourceable

1. public class source implements sourceable   

7. }

1. public class decorator implements sourceable   

9. @override

10. public void method()

15. }

測試類:

1. public class decoratortest   

8. }

輸出:before decorator!

the original method!

after decorator!

裝飾器模式的應用場景:

1、需要擴充套件乙個類的功能。

2、動態的為乙個物件增加功能,而且還能動態撤銷。(繼承不能做到這一點,繼承的功能是靜態的,不能動態增刪。)

缺點:產生過多相似的物件,不易排錯!

**模式和裝飾模式的差別:

實際上,在裝飾器模式和**模式之間還是有很多差別的。

裝飾器模式關注於在乙個物件上動態的新增方法,然而**模式關注於控制對物件的訪問。

換句話 說,

用**模式,**類(proxy class)可以對它的客戶隱藏乙個物件的具體資訊。因此,當使用**模式的時候,我們常常在乙個**類中建立乙個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為乙個引數傳給裝飾者的構造器。

我們可以用另外一句話來總結這些差別:使用**模式,**和真實物件之間的的關係通常在編譯時就已經確定了,而裝飾者能夠在執行時遞迴地被構造。    

設計模式之裝飾器模式

定義 decorator裝飾器,顧名思義,就是動態地給乙個物件新增一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特徵 它必須具有乙個裝飾的物件。它必須擁有與被裝飾物件相同的介面。它可以給被裝飾物件新增額外的功能。用一句話總結就是 保持介面,增強效能。裝飾器通過包裝乙個裝飾物件來...

設計模式之裝飾器模式

什麼是裝飾器模式 decorator 裝飾器模式的優點 裝飾器模式的缺點 示例 package com.pattern.decorator 抽象類,裝飾器的父類 author yjzhou public abstract class decorator implements component ov...

設計模式之裝飾器模式

package decorate 設計模式之裝飾器模式 動態給某個物件新增一些額外的職責。該模式涉及4個角色 1 介面或者是抽象類 abstract 2 需要被裝飾的物件 impl 實現介面或者繼承抽象類 3 裝飾類 decorate 也實現介面或者繼承抽象類 4 繼承裝飾類的子類 decorate...