一 概述
1.什麼是裝飾者模式?
在不修改類,不使用繼承的前提下,用乙個物件來裝飾另乙個物件,以擴充套件目標物件的功能。
2.裝飾者模式的作用:
繼承也可以擴充套件類的功能,裝飾者模式比繼承更加靈活,因為繼承時子類受父類的約束,比如子類
方法不能降低訪問許可權,返回值必須是父類方法返回值的子類,而裝飾模式就不受這些約束,比較靈活。
二 基本裝飾者模式
結構:
三 高階裝飾者模式
1.不僅可以對目標物件進行多種形式的增強,而且可以構建裝飾者鏈將多種增強形式同時施加到目標物件上。
3.按照功能模組化原則,乙個模組只負責單一的功能,每一種具體裝飾者類,只負責實現一種增強形式。
4.具體裝飾者類對目標類的增強建立在基類處理結果的基礎上,因此在**中通過先super獲取基類的結果,
然後再進行增強。
5.構建裝飾者鏈
⑴基本原理:
首先將目標物件傳入乙個具體裝飾者物件中,再將該具體裝飾者物件傳入下乙個具體裝飾者物件中,以此推進,
形成乙個裝飾者鏈,對目標物件逐級增強。
⑵構建關鍵:
在具體裝飾者類中通過super獲取基類處理結果,將基類作為中間環節構建裝飾者鏈。
⑶實現demo
介面
package目標類com.designmode.decorator.senior;
public
inte***ce
isomeservice
package裝飾者基類com.designmode.decorator.senior;
public
class someserviceimpl implements
isomeservice
}
package具體裝飾者a類com.designmode.decorator.senior;
public
isomeservice
@override
public
string dosome()
}
package具體裝飾者b類com.designmode.decorator.senior;
public
class trimdecorator extends
public
trimdecorator(isomeservice target)
@override
public
string dosome()
}
package測試類com.designmode.decorator.senior;
public
class upperdecorator extends
public
upperdecorator(isomeservice target)
@override
public
string dosome()
}
package三 常見裝飾者應用com.designmode.decorator.senior;
import
org.junit.test;
public
class
decoratortest
/*** 一次增強,對裝飾者基類增強
*/@test
public
void
test02()
/*** 形成裝飾者鏈,逐級增強
*/@test
public
void
test03()
}
io流中廣泛使用裝飾者模式,一些類正是裝飾了基本輸入輸出流建立的,如xmlwriter\dateoutputstream\
bufferedinputstream\
objectinputstream等。
四 與靜態**模式對比
1.相同點:
2.不同點
⑴設計目的不同:
⑵包含目標物件的方式不同:
注:靜態**模式請參考
Java設計模式之二裝飾模式
一 什麼是裝飾設計模式?裝飾模式是在不必改變原類檔案和使用繼續的情況下,動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是通過裝飾來包裹真實的物件。二 裝飾模式的特點 1 裝飾物件和真實物件有相同的介面。這樣客戶端物件就可以以和真實物件相同的方式和裝飾物件互動。2 裝飾物件包含乙個真實物...
Java 設計模式(二) 裝飾者模式
一 簡介 裝飾者模式要求有乙個被裝飾物件及多個裝飾者,每個裝飾者與被裝飾者實現同乙個介面或有同乙個超類,被裝飾者持有乙個裝飾者物件,所有實現由持有物件完成,裝飾者則在方法執行過程中增強方法實現 如 在方法執行前進行許可權驗證,在返回結果前進行加密處理等 二 示例 要求 商家活動要求商品具有多種打折方...
設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...