Java學習之裝飾者模式 列印流 合併流

2021-08-20 22:09:24 字數 1819 閱讀 3751

裝飾者模式

將原有的功能進行提公升

裝飾者模式的書寫步驟

1.將被裝飾者 當做類中的乙個成員變數;

2.在構造方法中 進行成員變數的賦值,賦值後,可以拿到被裝飾者的物件,可以呼叫被裝飾者的方法;

3.對方法進行公升級

例:模擬實現linenumberreader

class mylinenum  

public mylinenum(reader reader)

public int getlinenumber()

public void setlinenumber(int linenumber)

// 對read方法公升級

public string myread() throws ioexception else

} // 如果長度為0,說明讀取已經結束

if (sb.length() == 0)

// 如果出迴圈,又不為空,說明讀的是最後一行,返回

return sb.tostring();

} public void myclose() throws ioexception

}

列印流列印流永遠不會丟擲io異常(其他異常依舊)。

操作的是輸出目的,寫檔案,控制台列印

printstream(位元組流)

構造方法:檔案,位元組輸出流,路徑。

printwriter(字元流)

構造方法:檔案,字元輸出流,路徑,位元組輸出流。

列印流的核心功能:將要輸出的流原樣輸出到目的端。

之前常用的system.out就是printstream物件。

列印流有自動重新整理的功能,開物件宣告時,在構造方法中傳入true,就能開啟自動重新整理,自動重新整理只對流有效。

例:使用system.in 來實現從控制台寫入到檔案中

fileoutputstream fos = new fileoutputstream(new file("輸出路徑"));  

inputstream in = system.in;

// 用來拼接字串

stringbuilder sb = new stringbuilder();

while (true) else else

} }

合併流

sequenceinputstream

作用:可以把多個檔案讀成乙個檔案(合併成乙個檔案)

檔案不侷限於文字

兩種構造方法:

// 將s1,s2讀成乙個檔案,先s1,後s2  

sequenceinputstream(inputstream s1, inputstream s2)

// 將列舉器中的檔案讀成乙個檔案

sequenceinputstream(enumeration<? extends inputstream> e)

例:如何實現對檔案的分割     

public static void msplit(file file) throws filenotfoundexception, ioexception   

// 讀取檔案

int len = 0;

byte b = new byte[1024 * 1024];

// 根據分割的份數進行讀取

for (int i = 0; i < count; i++)

fis.close();

}

java之裝飾者模式 列印流 合併流

裝飾者模式 高內聚 低耦合 思想 將原有的功能進行提公升 裝飾者步驟 1.將被裝飾者當做類中乙個成員變數 2.在構造方法中進行成員變數的賦值 賦值後 就相當於可以拿到被裝飾者這個物件 有這個物件 就能呼叫該物件的方法 3.對方法進行公升級 public class demo01 學習 的介面 int...

java之裝飾者模式

作用 對物件的原有功能進行公升級 書寫步驟 1.明確被裝飾的物件 2.將被裝飾的物件 通過構造方法傳入裝飾類 裝飾類中 肯定有乙個成員變數 就是被裝飾的物件 3.擁有被裝飾的物件 相當於可以呼叫該物件中的所有方法 就可以對該方法進行公升級 在校學生 class student implements ...

java設計模式之裝飾者模式

裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。類圖 barbecue類 實現 package com.decorator public abstract class barbecue public abstract double cost fish類 ...