裝飾器模式使用分層物件來動態透明地向單個物件新增責任。裝飾器指定包裝在最初的物件周圍的所有物件具有相同的介面。
decorator裝飾器,顧名思義,就是動態地給乙個物件新增一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特徵:
它必須具有乙個裝飾的物件。
它必須擁有與被裝飾物件相同的介面。
它可以給被裝飾物件新增額外的功能。
用一句話總結就是:保持介面,增強效能。
裝飾器通過包裝乙個裝飾物件來擴充套件其功能,而又不改變其介面,這實際上是基於物件的介面卡模式的一種變種。它與物件的介面卡模式的異同點如下。
下面給出乙個裝飾器模式的示例:
class basic
public string get()
}
乙個基類,定義了乙個set()和乙個get()方法;
class decorator extends basic
public void set(string val)
public string get()
}
類decorator是基類basic的乙個實現。接下來實現類timestamped繼承decorator實現效能增加;
class timestamped extends decorator
public long getstamp()
}
裝飾器timestamped採用典型的物件介面卡模式,他擁有乙個timestamped建構函式,並以basic為引數,以期decorator保持相同的介面。並實現自己特有的方法getstamp().這就是裝飾器擴充套件的功能。
class serialnumbered extends decorator
public long getserialnumber()
}
類serialnumbered是另乙個裝飾器,不過就是所裝飾的功能不一樣,這裡獲取自增長的serialnumber數值。
實現了兩個裝飾器,這時,我們可以使用物件的介面卡模式一樣來使用這些裝飾器,使用不同的裝飾器就可以達到不同的裝飾效果。
timestamped t = new timestamped(new basic());
timestamped t2 = new timestamped(new serialnumbered(new basic()));
t2.getstamp();
serialnumbered s = new serialnumbered(new basic());
serialnumbered s2 = new serialnumbered(new timestamped(new basic()));
s2.getserialnumber();
分別用timestamped,serialnumbered裝飾源類物件basic,和類物件serialnumbered。
裝飾器模式 java
decorator getresult 得到帶有url的資訊 抽象類a 類b 繼承a analyses content list 類c 繼承a 屬性a的物件a analyses 包含a.analyses 類f 繼承c analyses 長短有效性匹配 getresult 執行super.analys...
Java設計模式 裝飾器模式
我們 不從最基本的裝飾器模式概念入手 先來看問題好了。提出問題 假如 有以下海關入關通用處理方法 public class shanghaicustoms public class beijingcustoms 現在我們需要新加入需求,原先的處理流程不變,但是需要加入security checks和...
Java 設計模式 裝飾器模式
本文由 luzhuo 編寫,請保留該資訊.原文 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類 public inte ce phonepublic final class phoneimpl impl...