Android之裝飾着設計模式

裝飾着設計模式:

BufferedReader拓展了FileReader的功能。

BufferedWriter拓展了FileWriter的功能。

需求1: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有行號。

需求2:編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有分號。

需求3: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有雙引號。

需求4: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有行號+ 分號。

需求5: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有分號+ 雙引號。

需求6: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有雙引號+ 行號。

需求7: 編寫一個類拓展BufferedReader的功能, 增強readLine方法返回 的字符串帶有行號+ 分號+雙引號。

裝飾者設計模式的步驟:

	1.在裝飾類的內部維護一個被裝飾類的引用。

	2.在裝飾類有一個共同的父類或者是父接口。

繼承實現的增強類和修飾模式實現的增強類有何區別?

繼承實現的增強類:

優點:代碼結構清晰而且實現簡單

缺點:對於每一個需要增強的類都要創建具體的子類來幫助其增強,這樣會導致繼承體系過於龐大。

修飾模式實現的增強類:

優點:內部可以通過多態技術對多個需要增強的類進行增強,可以是這些裝飾類達到互相裝飾的效果。使用比較靈活。

缺點:需要內部通過多態技術維護需要被增強的類的實例。進而使得代碼稍微複雜。

需求具體代碼:

package net.nyist;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class Demo5 {

	public static void main(String[] args) throws IOException {
		
		File file = new File("E:\\Learning materials\\JAVA\\day21\\代碼\\day21\\src\\other\\Demo1.java");
		FileReader fileReader = new FileReader(file);
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		BufferedLineNum bufferedLineNum = new BufferedLineNum(bufferedReader);
		BufferedSemicolon bufferedSemicolon = new BufferedSemicolon(bufferedLineNum);
		Bufferedquotation bufferedquotation = new Bufferedquotation(bufferedSemicolon);
		String line = null;
		while((line = bufferedquotation.readLine())!=null){
			System.out.println(line);
		}
	}	
}
//帶行號緩衝輸入字符流
class BufferedLineNum  extends BufferedReader{
	
	//在內部維護一個被裝飾的引用
	BufferedReader bufferedReader;
	int count = 1;
		public BufferedLineNum(BufferedReader bufferedReader) {
			super(bufferedReader);
			this.bufferedReader = bufferedReader;
		}//該語句沒有任何的作用,只不過是爲了不讓代碼不報錯
		public String readLine() throws IOException{
			String line = bufferedReader.readLine();
			if(line == null){
				return null;
			}
			line = count+" "+line;
			count++;
			return line;
		}
}
class BufferedSemicolon extends BufferedReader{
	
	BufferedReader bufferedReader;
	
	public BufferedSemicolon(BufferedReader bufferedReader) {
		super(bufferedReader);
		this.bufferedReader = bufferedReader;
	}
	public String readLine() throws IOException{
		String line = bufferedReader.readLine();
		if(line == null){
			return null;
		}
		line = line +";";
		return line;
	}
}

class Bufferedquotation extends BufferedReader{

	BufferedReader bufferedReader;
	
	public Bufferedquotation(BufferedReader bufferedReader) {
		super(bufferedReader);
		this.bufferedReader = bufferedReader;
	}
	public String readLine() throws IOException{
		
		String line = bufferedReader.readLine();
		if(line == null){
			return null;
		}
		line = "\""+line+"\"";
		return line;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章