java 中設(shè)計模式(裝飾設(shè)計模式)的實例詳解
java 中設(shè)計模式(裝飾設(shè)計模式)的實例詳解
應(yīng)用場景:
在不對原有對象類進(jìn)行修改的基礎(chǔ)上,給一個或多個已有的類對象提供增強(qiáng)額外的功能.
我覺得可以從字面理解,裝飾,裝飾房子。房子可以看成原有的類。等于你把一個已經(jīng)建好的房子按照自己的想法再裝飾一遍。繼承也可以實現(xiàn)這樣的功能,但是繼承有它的缺點(diǎn),繼承只是單一繼承。裝飾設(shè)計模式可以取多個不同的類的不同功能。
具體步驟:
◎第1步:通過構(gòu)造傳參把需要加強(qiáng)的類傳過來。(你要裝修房子,肯定的先有房子吧。這個很好理解)
◎第2步:把具體需要增強(qiáng)的功能寫了
具體例子及代碼
寫一個MyBufferedReader類,使它能夠?qū)ψ址?如FileReader、InputStreamReader和PipedReader等)進(jìn)行功能增強(qiáng):
(1) 提供帶緩沖的myRead()方法,對原有的read()方法進(jìn)行增速;
(2)提供一個能夠每次讀取一行字符的myReadLine()方法。
import java.io.FileReader;
import java.io.IOException;
/**
* * 版本2: 增強(qiáng)FileReader類,使它具有如下功能:
* (1) 提供帶緩沖的myRead()方法,對原有的read()方法進(jìn)行增速;
(2)提供一個能夠每次讀取一行字符的myReadLine()方法。
*/
public class MyBufferedReader {
private char[] cbuf= new char[1024];//緩存
private int pos=0; //當(dāng)前讀取的位置
private int count=0;//記錄緩存中當(dāng)前的字符總數(shù)
//封裝一個FileReader對象,幫助我們實現(xiàn)從文件中讀取一批數(shù)據(jù)
private FileReader r = null;
public MyBufferedReader(FileReader r) {
super();
this.r = r;
}
/**
* 從緩存中讀取一個字符數(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;
}
//回車字符: \r 13
//換行字符: \n 10
public String myReadLine() throws IOException{
StringBuilder sb=new StringBuilder();
int ch=0;
//有回車換行符部分
while( (ch=myRead())!=-1){
if(ch=='\r'){
continue;
}
if(ch=='\n'){
return sb.toString();
}
sb.append((char)ch);
}
if(sb.length()!=0){//最后一行(沒有回車換行符)
return sb.toString();
}
return null;//最后或空文件
}
public void close() throws IOException{
r.close();
}
}
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Java?MyBatis是如何執(zhí)行一條SQL語句的
這篇文章主要介紹了Java?MyBatis是如何執(zhí)行一條SQL語句的,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07
Java和C語言分別實現(xiàn)水仙花數(shù)及拓展代碼
這篇文章主要介紹了分別用Java和C語言實現(xiàn)水仙花數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
SpringCloud服務(wù)網(wǎng)關(guān)Gateway的使用教程詳解
SpringCloud Gateway是Spring體系內(nèi)的一個全新項目,它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式。本文就來為大家詳細(xì)講講Gateway的使用教程,需要的可以參考一下2022-09-09
Struts2中圖片以base64方式上傳至數(shù)據(jù)庫
這篇文章主要介紹了Struts2中圖片以base64方式上傳至數(shù)據(jù)庫的實現(xiàn)代碼,代碼分為前臺和后臺兩段,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
關(guān)于swagger配置及踩坑@Api參數(shù)postion無效解決接口排序問題
這篇文章主要介紹了關(guān)于swagger配置及踩坑@Api參數(shù)postion無效解決接口排序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
elasticsearch索引index之put?mapping的設(shè)置分析
這篇文章主要為大家介紹了elasticsearch索引index之put?mapping的設(shè)置分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

