裝飾設計模式和繼承的區別


/*
裝飾設計模式:
當想要對已有的對象進行功能增強時,
可以定義類,將已有對象傳入,基於已有的功能,並提供加強功能。
那么自定義的該類稱為裝飾類。

裝飾類通常會通過構造方法接收被裝飾的對象。
並基於被裝飾的對象的功能,提供更強的功能。





裝飾和繼承

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//裝飾類


以前是通過繼承將每一個子類都具備緩沖功能。
那么繼承體系會復雜,並不利於擴展。

現在優化思想。單獨描述一下緩沖內容。
將需要被緩沖的對象。傳遞進來。也就是,誰需要被緩沖,誰就作為參數傳遞給緩沖區。
這樣繼承體系就變得很簡單。優化了體系結構。





裝飾模式比繼承要靈活。避免了繼承體系臃腫。
而且降低了類於類之間的關系。

裝飾類因為增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。
所以裝飾類和被裝飾類通常是都屬於一個體系中的。



*/

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM