溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解

發(fā)布時(shí)間:2020-09-30 09:01:17 來(lái)源:腳本之家 閱讀:182 作者:海那邊的小萌男 欄目:編程語(yǔ)言

java 中設(shè)計(jì)模式(裝飾設(shè)計(jì)模式)的實(shí)例詳解

應(yīng)用場(chǎng)景

在不對(duì)原有對(duì)象類(lèi)進(jìn)行修改的基礎(chǔ)上,給一個(gè)或多個(gè)已有的類(lèi)對(duì)象提供增強(qiáng)額外的功能.

我覺(jué)得可以從字面理解,裝飾,裝飾房子。房子可以看成原有的類(lèi)。等于你把一個(gè)已經(jīng)建好的房子按照自己的想法再裝飾一遍。繼承也可以實(shí)現(xiàn)這樣的功能,但是繼承有它的缺點(diǎn),繼承只是單一繼承。裝飾設(shè)計(jì)模式可以取多個(gè)不同的類(lèi)的不同功能。

具體步驟:

◎第1步:通過(guò)構(gòu)造傳參把需要加強(qiáng)的類(lèi)傳過(guò)來(lái)。(你要裝修房子,肯定的先有房子吧。這個(gè)很好理解)

◎第2步:把具體需要增強(qiáng)的功能寫(xiě)了

具體例子及代碼

寫(xiě)一個(gè)MyBufferedReader類(lèi),使它能夠?qū)ψ址?如FileReader、InputStreamReader和PipedReader等)進(jìn)行功能增強(qiáng):

(1) 提供帶緩沖的myRead()方法,對(duì)原有的read()方法進(jìn)行增速;

(2)提供一個(gè)能夠每次讀取一行字符的myReadLine()方法。

import java.io.FileReader;
import java.io.IOException;
/**
 * * 版本2: 增強(qiáng)FileReader類(lèi),使它具有如下功能:
 * (1) 提供帶緩沖的myRead()方法,對(duì)原有的read()方法進(jìn)行增速;
  (2)提供一個(gè)能夠每次讀取一行字符的myReadLine()方法。
 */
public class MyBufferedReader {
  private char[] cbuf= new char[1024];//緩存
  private int pos=0; //當(dāng)前讀取的位置
  private int count=0;//記錄緩存中當(dāng)前的字符總數(shù)

  //封裝一個(gè)FileReader對(duì)象,幫助我們實(shí)現(xiàn)從文件中讀取一批數(shù)據(jù)
  private FileReader r = null;

  public MyBufferedReader(FileReader r) {
    super();
    this.r = r;
  }


  /**
   * 從緩存中讀取一個(gè)字符數(shù)據(jù)返回
   * @throws IOException 
   * @return所讀取的字符,如果到達(dá)文件末尾則返回-1
   */
  public int myRead() throws IOException{
    //從文件中把數(shù)據(jù)讀取到緩存buf[]中
    if(count<=0){
      //System.out.println("**********");
      count = r.read(cbuf);
      if(count==-1){
        return -1;
      }
      pos=0;
    }

    char ch = cbuf[pos];
    pos++;
    count--;
    return ch;
  }


  //回車(chē)字符: \r 13
  //換行字符: \n 10

  public String myReadLine() throws IOException{
    StringBuilder sb=new StringBuilder();
    int ch=0;
    //有回車(chē)換行符部分
    while( (ch=myRead())!=-1){ 
      if(ch=='\r'){
        continue;
      }
      if(ch=='\n'){
        return sb.toString();
      }
      sb.append((char)ch);
    }

    if(sb.length()!=0){//最后一行(沒(méi)有回車(chē)換行符)
      return sb.toString();
    }

    return null;//最后或空文件
  }


  public void close() throws IOException{
    r.close();
  }
}

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI