/*
裝飾設計模式:
當想要對已有的對象進行功能增強時,
可以定義類,將已有對象傳入,基於已有的功能,並提供加強功能。
那么自定義的該類稱為裝飾類。
裝飾類通常會通過構造方法接收被裝飾的對象。
並基於被裝飾的對象的功能,提供更強的功能。
裝飾和繼承
MyReader//專門用於讀取數據的類。
|--MyTextReader
|--MyBufferTextReader
|--MyMediaReader
|--MyBufferMediaReader
|--MyDataReader
|--MyBufferDataReader
class MyBufferReader
{
MyBufferReader(MyTextReader text)
{}
MyBufferReader(MyMediaReader media)
{}
}
上面這個類擴展性很差。
找到其參數的共同類型。通過多態的形式。可以提高擴展性。
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{}
}
MyReader//專門用於讀取數據的類。
|--MyTextReader
|--MyMediaReader
|--MyDataReader
|--MyBufferReader//裝飾類
以前是通過繼承將每一個子類都具備緩沖功能。
那么繼承體系會復雜,並不利於擴展。
現在優化思想。單獨描述一下緩沖內容。
將需要被緩沖的對象。傳遞進來。也就是,誰需要被緩沖,誰就作為參數傳遞給緩沖區。
這樣繼承體系就變得很簡單。優化了體系結構。
裝飾模式比繼承要靈活。避免了繼承體系臃腫。
而且降低了類於類之間的關系。
裝飾類因為增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。
所以裝飾類和被裝飾類通常是都屬於一個體系中的。
*/