/*
裝飾設計模式:
當想要對已有的對象進行功能增強時,
可以定義類,將已有對象傳入,基於已有的功能,並提供加強功能。
那麼自定義的該類稱爲裝飾類。
裝飾類通常會通過構造方法接收被裝飾的對象。
並基於被裝飾的對象的功能,提供更強的功能。
*/
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!");
}
}
IO流——裝飾和繼承的區別
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.