1. 程式人生 > >JavaEE之裝飾者模式-Decorator

JavaEE之裝飾者模式-Decorator

裝飾者模式-Decorator

        裝飾者模式:當開發者覺得某些類的某些方法不滿足需要,向增強這些類的方法。這是就可以使用裝飾者模式去裝飾這些類。不滿足需求的這些類,叫被裝飾類。開發者需要重新編寫裝飾類去覆蓋被裝飾類。

                  BufferedReader:被裝飾類。readLine方法不滿足需要。

                  MyBufferReader:裝飾類。

                                     裝飾步驟:

                                               1)繼承被裝飾類。BufferedReader。

final

                                               2)裝飾類中宣告一個成員變數(被裝飾類型別)

                                               3)在構造方法,把被裝飾類的例項接收到,賦值給成員變數

                                               4)重寫被裝飾的方法。

	/**
	 * 改造: 在每行名字前面加上一個序號。
	 * 解決方案: 希望readLine方法返回給我們的就是一個帶序號的內容。對BufferedReader的readLine方法進行增強。這是就可以用到裝飾者模式。
	 * 	  裝飾者模式的開發步驟:
	 * 		  概念: 裝飾者  和 被裝飾者  .   BufferedReader就是被裝飾者
	 * 			1)編寫一個BufferedReader裝飾者類,繼承被裝飾者類。(不能是final的)
	 *          2)在裝飾類中定義一個成員變數,用於接收被裝飾者類的物件。
	 *          3)在裝飾者類的構造方法中傳入被裝飾者類,使用第二步定義的變數接收被轉入的 被裝飾者類。	
	 * 			4)在裝飾類類中重寫被裝飾者類方法,對其方法進行增強。
	 */
}

/**
 * 1)編寫一個BufferedReader裝飾者類,繼承被裝飾者類。(不能是final的) 
 * 		BufferedReader(是非final的)
*/
class MyBufferedReader extends BufferedReader{
	
	/*public MyBufferedReader(){
		super();
	}*/
	
	/**
	 * 2)在裝飾類中定義一個成員變數,用於接收被裝飾者類的物件。
	 */
	private BufferedReader br;
	
	/**
	 *  3)在裝飾者類的構造方法中傳入被裝飾者類,使用第二步定義的變數接收被轉入的 被裝飾者類。	
	 * @param in
	 */
	public MyBufferedReader(Reader in) {
		super(in);
		this.br = (BufferedReader)in;
	}
	int count = 1;
	/**
	 * 4)在裝飾類類中重寫被裝飾者類方法,對其方法進行增強。
	 */
	@Override
	public String readLine() throws IOException {
		//得到原來的真實的內容
		String content = br.readLine();
		//加強: 加上序號
		if(content!=null){
			content = count+":"+content;
			count++;
		}
		return content;
	}
	
}