設計模式-裝飾設計模式

風痕影默發表於2014-09-29

裝飾設計模式:當需要對某些類功能進行增強時,可以把這個類的物件傳到自定義類中,然後利用此物件具備的方法在此基礎之上進行功能的增強。

與繼承的區別:擴充套件性強一些

例如:有Reader類,我們可以讀取text,讀取meidia,一個繼承體系形成如下:

Reader

|-TextReader

|-MediaReader

若繼承來擴充套件功能的話,則會形成如下的繼承體系

Reader

|-TextReader

  |-BufferTextReader

|-MediaReader

  |-BufferMediaReader

但是上面的BufferTextReader和BufferMediaReader都是緩衝的功能,若利用裝飾類加上多型機制的話這樣可以相稱如下的體系

Reader

|-TextReader

|-MediaReader

|-BufferReader

這樣區別就顯示出來了
*裝飾類可以避免繼承的臃腫體系,減少程式碼的冗餘度

*裝飾類一般為了增強某個類的功能,和這個類一般屬於同一體系

裝飾類程式碼舉例import java.io.*;class MyBufferedReader

{
    private FileReader fileReader;

    public MyBufferedReader(FileReader fileReader)
    {
        this.fileReader = fileReader;
    }

    public String MyReadLine()throws IOException
    {
        StringBuilder sb = new StringBuilder();

        int readNum = 0;
        while((readNum = fileReader.read()) != -1)
        {
            char readChar = (char)readNum;
       if(readChar == '\r')
         continue;
if(readChar =='\n') return sb.toString(); else sb.append(readChar); }      if(sb.length() != 0)//為了防止檔案最後的一行沒有回車,這樣便會導致最後一行未返回
         return sb.toString();
return null; } }

 此處說明:\r與\n的區別

\r:確切意思是return,即返回到當前行的第一列即開頭

\n:確切意思應是新的一行,即類似回車

\r\n:在windows中\n的另一種形式

相關文章