推薦博客
Java設計模式學習09
Java設計模式學習09
Java設計模式學習09
裝飾者模式還是比較難懂的除抛。。。椰憋。,我也說不了啥,詳解看上面博客,下面案例是我仿照上面博客寫的赔退。
-
Behaver 定義行為接口
public interface Behavior { void dressing();//化妝 }
-
Person 人類
public class Person implements Behavior { private Behavior behavior; public Person(Behavior behavior) { this.behavior = behavior; } @Override public void dressing() { behavior.dressing(); } }
-
Animal 不可否認人也是動物
public class Animal implements Behavior { @Override public void dressing() { System.out.println("化妝橙依。。硕旗。"); } }
-
男人
public class Man extends Person { public Man(Behavior behavior) { super(behavior); } @Override public void dressing() { super.dressing(); System.out.println("化男人妝窗骑。。漆枚。"); } }
-
女人
public class Woman extends Person { public Woman(Behavior behavior) { super(behavior); } @Override public void dressing() { super.dressing(); System.out.println("化女人妝创译。。墙基。"); } }
-
測試類
/** * 裝飾者案例 */ public class Demo { public static void main(String[] args) { System.out.println("=====================動物化妝========================"); Animal animal = new Animal(); animal.dressing(); System.out.println("=====================男人化妝========================"); Man man = new Man(animal); man.dressing(); System.out.println("=====================女人化妝========================"); Woman woman = new Woman(animal); woman.dressing(); System.out.println("=====================人妖化妝========================"); Woman woman1 = new Woman(man); woman1.dressing(); } }
結(jié)果
我們可以看到软族,實例化女人1的時候換了一個實例組合,于是就出現(xiàn)了新的功能碘橘。互订。。
字符輸出流使用緩沖----FileReader和BufferedReader
- FileReader 文件字符輸入流
- BufferedReader 緩沖字符輸入出流
BufferedReaderr緩沖字符輸出流痘拆,直接繼承自Reader
構(gòu)造方法
public BufferedReader(Reader var1, int var2) {
super(var1);
this.markedChar = -1;
this.readAheadLimit = 0;
this.skipLF = false;
this.markedSkipLF = false;
if(var2 <= 0) {
throw new IllegalArgumentException("Buffer size <= 0");
} else {
this.in = var1;
this.cb = new char[var2];
this.nextChar = this.nChars = 0;
}
}
public BufferedReader(Reader var1) {
this(var1, defaultCharBufferSize);
}
同BufferWriter一樣仰禽,兩個構(gòu)造方法。實例化的時候需要一個Reader實例。
運用案例
/**
* 讀取Demo6.java的內(nèi)容
*/
public class Demo{
public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series10/src/main/java/com/example/Demo6.java";
public static void main(String[] args) {
//1.申明
FileReader reader = null;
BufferedReader bufferedReader = null;
try {
//2.實例化
reader = new FileReader(PATH);
bufferedReader = new BufferedReader(reader);
//3.讀取
String msg=null;
while ((msg=bufferedReader.readLine())!=null){//如果是null吐葵,則表示文件結(jié)束
System.out.println(msg);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
結(jié)果
裝飾者模式再運用----自定義BufferReader
-
自定義BufferReader類
class CoustomerBufferReader { private Reader in; //緩沖數(shù)組 private char[] buffer=new char[1024]; //每次讀取的字符個數(shù) private int nChars; //緩沖數(shù)組的索引下標 private int nextChar; public CoustomerBufferReader(Reader in) { this.in = in; } public int read() throws IOException { if (nChars == 0) {//表示緩沖中沒有可讀的字符 //讀取節(jié)點流(字符流)中數(shù)據(jù)到緩沖數(shù)組中 nChars = in.read(buffer); nextChar = 0; } if (nChars < 0) {//判斷是否讀取末尾 return -1; } int num = buffer[nextChar++];//從緩沖數(shù)組中獲取一個字符 nChars--;//讀一輪规揪,減一個 return num; } public String readLine() throws IOException { int num = -1; StringBuilder builder = new StringBuilder(); while ((num = read()) != -1) { if (num == '\r') { continue; } else if (num == '\n') { return builder.toString(); } builder.append((char) num);//將讀取的一個字符存放到變量中 } //防止最后一行不存在換行符時,無法讀取最后一行 if (builder.length() > 0) return builder.toString(); return null; } }
-
測試類
public class Demo{ public static void main(String[] args) { try { //讀取Demo6中的內(nèi)容 FileReader reader = new FileReader(Demo7.PATH); //使用自己的CoustomerBufferReader CoustomerBufferReader bufferReader=new CoustomerBufferReader(reader); String line=null; while ((line=bufferReader.readLine())!=null){ System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } }
結(jié)果
緩沖字符輸入温峭,輸出流復制文件案例
講道理正長是這樣寫
public class Demo {
//拷貝源文件
public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series10/src/main/java/com/example/Demo6.java";
public static final String NAME = "testDemo9.java";
public static void main(String[] args) {
FileReader reader = null;
BufferedReader bufferedReader = null;
FileWriter fileWriter = null;
BufferedWriter bufferedWriter = null;
try {
reader = new FileReader(PATH);
bufferedReader = new BufferedReader(reader);
fileWriter = new FileWriter(Config.PATH + NAME);
bufferedWriter = new BufferedWriter(fileWriter);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
//讀一行猛铅,寫一行
bufferedWriter.write(line);
bufferedWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
運行一看結(jié)果,傻眼了:
它一行寫到死。這可不行凤藏,我們看一下奸忽,除了沒換行,其他都對揖庄,那我們控制它換行就可以了栗菜。
-
完美版 核心代碼替換
boolean isFirstLine=true;//剛開始絕B第一行 while ((line = bufferedReader.readLine()) != null) { //讀一行,寫一行 if (isFirstLine){//第一行直接寫 bufferedWriter.write(line); isFirstLine=false;//寫完之后絕B不是第一行了 }else { bufferedWriter.newLine();//插入換行 bufferedWriter.write(line); } bufferedWriter.flush(); }
-
運行結(jié)果