多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網(wǎng) > 裝飾模式(舊戀)

裝飾模式(舊戀)

來源:程序員人生   發(fā)布時間:2014-09-26 18:44:01 閱讀次數(shù):2193次

|--什么是裝飾模式。

裝飾模式:是你還是你,一切拜托你(借用老崔經(jīng)典詞)。


它是由繼承出現(xiàn)的,先有繼承,再有裝飾。
回憶繼承
    好處:提高復用性,讓可以重復使用,通過方法重寫利用后期擴展。
    壞處:由于類與類之間的繼承關(guān)系,但他們關(guān)系增強,耦性也就高了。不符合java宗旨:低耦合,高內(nèi)聚。

對比如下:
a: 有一個Witer體系
|--TxtWrite
|--Mp3Write
|--DIDWrite
上面是一個普通子類實現(xiàn),調(diào)用者覺得執(zhí)行太慢,要求對三者進行增強(高效|緩沖)。修改如下
class myBuffereWrite exetends Write{
//接收子類:Fu f = new Zi();
private Write ziWrite;


public BuffereWrite(Write ziWrite)
{
this.ziWrite = ziWrite;
}
public void writeLine(String line)
{
//使用ziWrite進行整容處理,然后一行數(shù)據(jù)保存到write中。
}
public void close()
{
ziWrite.clese();//多態(tài)(調(diào)用的還是子類)!
}
public void flash(){
ziWrite.flash();//多態(tài)(調(diào)用的還是子類)!
}
....//重寫Write的抽象方法,調(diào)用的myBuffereWrite中的,再方法里邊調(diào)用是傳送ziWrite。只不過在調(diào)用它
之前給它做了一些手術(shù)。
}

|--總結(jié)
   1:比如你使用Write的高效功能,那你就創(chuàng)建myBuffereWrite,傳遞你的對其高效的對象,比如FileWrite();
   2:裝飾模式體現(xiàn)了對一個對象(功能)的增強(高內(nèi)聚),然后緊密性比較弱(低耦合)。
   3:JDK中用的裝飾就挺多的,比如BufferedWriter(Writer out);PrintStream(OutputStream out);ObjectInputStream(InputStream in)等。


|--代碼示例

  模擬BuffereReader裝飾類

package com.Decoration; import java.io.IOException; import java.io.Reader; /** * @author hubiao * 模擬BuffereReader裝飾類 * * 分析:模擬一個類,就是自定一個類,實現(xiàn)它的特有方法:ReadLine(); * 1:模擬什么:特有方法 * 2:你有什么:根據(jù)裝飾特點,自定的類繼承一個抽象類,因為BuffereReader的readLine底層也是繼承Reader中的。 * 我們要做的,也是繼承Reader,寫一個與BuffereReader一樣的ReadLine方法來。 */ public class MyBuffere extends Reader { /*Reader是一個抽象類的父類,將需要高效的類都實現(xiàn)了它。都是它的子類。*/ private Reader reader = null; public MyBuffere(Reader reader){ this.reader = reader; } public int read(char[] cbuf, int off, int len) throws IOException { return reader.read(cbuf, off, len); } public String readLine() throws IOException { /** * 1:這里要思考,使用 * A:read(char[] cbuf, int off, int len);一次讀取一緩沖區(qū) * B:read();//一次讀取一個字符串 * 2:分析 * 我們模擬readLine目的是為了模擬什么?還不是為了實現(xiàn)BufferedReader中的readerLine一次讀取一行的高效方法。 * 然后使用A方法不合適,因為它一次讀取一個char容量定義的長度,我們封裝好的代碼很難獲知調(diào)用者要讀取的數(shù)據(jù)文本的每行數(shù)據(jù)有多長。 * 使用B方法的好處,是一次讀取一個字符,當遇到 就說明是一行的結(jié)束,則說一行讀取完畢,那怎么一行的數(shù)據(jù)每個字符用什么保存呢? * 使用String, 這...太可怕了吧,因為我們知道String在java中是一個常量池。一但賦值,將不可變。所以選擇效率高的StringBuilder * 把每個字符拼接到StringBuffer中,再返回給調(diào)用者。 */ //單字符容器 StringBuffer buffer = new StringBuffer(); //每個字符 int read = 0; while((read = reader.read())!=-1) { char chr = (char) read; if(chr==' ') continue; if(chr==' ') return buffer.toString(); else buffer.append(chr); } //防止讀取的是最后一行,則沒有 ,那么再判斷緩沖區(qū)中是否有值?如果有,則再返回。 if(buffer.length() > 0 ) return buffer.toString(); else return null; } public void close() throws IOException { reader.close(); } }

  模擬LineNumberReader

/** * @author hubiao * 模擬LineNumberReader * 也是同樣,模擬,就是自定一個類,模擬需求給出的特殊方法:獲取每個行號,然后讀取每一行。 */ public class MyLineNumberReader extends Reader{ /*接收傳遞子類對象,F(xiàn)u f = new Zi();//多態(tài)*/ private Reader reader; private int lineNumber;//行號 public MyLineNumberReader(Reader reader) { this.reader = reader; } public int read(char[] cbuf, int off, int len) throws IOException { return reader.read(cbuf, off, len); } public String readLine() throws IOException { //單字符容器 StringBuffer buffer = new StringBuffer(); //每個字符 int read = 0; while((read = reader.read())!=-1)//-1表示讀取到流的結(jié)尾! { char chr = (char) read; if(chr==' ') continue; if(chr==' '){ lineNumber++; return buffer.toString(); } else buffer.append(chr); } //防止讀取的是最后一行,則沒有 ,那么再判斷緩沖區(qū)中是否有值?如果有,則再返回。 if(buffer.length() > 0 ){ lineNumber++; return buffer.toString(); }else return null; } public void close() throws IOException { reader.close(); } public int getLineNumber() { return lineNumber; } public void setLineNumber(int lineNumber) { this.lineNumber = lineNumber; } }


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产欧美一区二区三区视频在线观看 | 免费xxxxx在线观看网站 | 91在线精品亚洲一区二区 | 波多野结衣99| 日韩成人免费视频播放 | 欧美成人天天综合在线视色 | 国产精品系列在线 | 娇小性色xxxxx中文 | 国产大片51精品免费观看 | 免费观看片 | 精品久久久久久久一区二区手机版 | 国产精品欧美亚洲韩国日本99 | 亚洲影院在线 | 性色a按摩videos| jizz在线观看18 | 亚洲春色小说 | 国内久久精品 | 咸片在线网站免费观看 | 日本www在线视频 | 欧美交性 | 毛片大片 | 日韩精品无码一区二区三区 | 国产精品5 | 国产欧美日本在线 | 在线国产区 | 九九热视频免费 | 天堂最新版免费观看 | 久久极品 | 成人在色线视频在线观看免费大全 | 日本理论午夜中文字幕第一页 | 免费一级毛片正在播放 | 在线观看美女网站 | 国产精品爱久久久久久久9999 | 亚洲韩国日本欧美一区二区三区 | 日韩精品一区二区三区在线观看l | 久草在线观看首页 | 精品偷自拍另类在线观看 | 日本中文字幕在线播放 | 亚洲视频456| 日韩视频一区二区三区 | 伊人五月 |