IO流——裝飾和繼承的區別

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

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


*/
class Person
{
	public void chifan()
	{
		System.out.println("吃飯");
	}
}

class SuperPerson 
{
	private Person p ;
	SuperPerson(Person p)
	{
		this.p = p;
	}
	public void superChifan()
	{
		System.out.println("開胃酒");
		p.chifan();
		System.out.println("甜點");
		System.out.println("來一根");
	}
}



class  PersonDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person();

		//p.chifan();

		SuperPerson sp = new SuperPerson(p);
		sp.superChifan();

	}
}





/*


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


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

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





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

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




*/


class  
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章