基礎學習總結之裝飾設計模式

2021-06-17 22:16:27 字數 3834 閱讀 3602

一、裝飾設計模式:

當想要對已有的物件進行功能增強時,可以定義類,將已有物件傳入,基於已有功能,提供加強功能。

那麼自定義的類稱為裝飾類。

例子:對人吃飯這一功能進行增強

class person

}

class superperson

public void supereat()

}

class persondemo 

}

由該例可知,裝飾類通常會通過構造方法接受被裝飾的物件,並基於被裝飾的物件的功能,提供更強的功能。

二、裝飾與繼承的區別:

myreader//專門用於讀取資料的類。

|——mytextreader

|——mybuffertextreader

|——mymediareader

|——mybuffermediareader

|——mydatareader

|——mybufferdatareader

class mybufferreader

mybufferreader(mymediareader medi)

{}

}

上面這個類擴充套件性很差。

找到其引數的共同型別,通過多型的形式,可以提高擴充套件性。

class mybufferreader extends myreader

}

myreader//專門用於讀取資料的類。

|——mytextreader

|——mymediareader

|——mydatareader

|——mybufferdatareader

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

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

三、io中的裝飾設計模式:

例子:模擬乙個帶行號的緩衝區物件。

class mylinenumberreader

public string myreadline() throws exception

if(sb.length()!=0)

return sb.tostring();

return null;

}

public void setlinenumber(int linenumber)

public int getlinenumber()

public void myclose()throws ioexception

}

class mylinenumberreaderdemo

mylnr.myclose();

}

}

裝飾設計模式解決:對一組類進行功能的增強。

包裝:寫乙個類(

包裝類)

對被包裝物件進行包裝;

1、包裝類和被包裝物件要實現同樣的介面;

2、包裝類要持有乙個被包裝物件;

3、包裝類在實現介面時,大部分方法是靠呼叫被包裝物件來實現的,對於需要修改的方法我們自己實現

java基礎學習之裝飾設計模式

在學習io流的時候,使用底層的基礎的輸入輸出流 inputstream outputstream和reader writer 進行讀寫操作的時候,我們一般會使用bufferinputstream bufferoutputstream和bufferreader bufferwriter進行包裝。pub...

設計模式學習總結 裝飾模式

抽象構件角色 component 給出乙個抽象介面,以規範準備接收附加責任的物件。具體構件角色 concrete component 定義乙個將要接收附加責任的類。裝飾角色 decorator 持有乙個構件 component 物件的引用,並定義乙個與抽象構件介面一致的介面。具體裝飾角色 concr...

設計模式學習總結 8 裝飾模式

8.裝飾模式 意圖 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。主要解決 一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹 什麼時候使用 在不想增加很多子類的情況下擴充套件類 如...