JavaEE之裝飾者模式-Decorator
阿新 • • 發佈:2019-01-02
裝飾者模式-Decorator
裝飾者模式:當開發者覺得某些類的某些方法不滿足需要,向增強這些類的方法。這是就可以使用裝飾者模式去裝飾這些類。不滿足需求的這些類,叫被裝飾類。開發者需要重新編寫裝飾類去覆蓋被裝飾類。
BufferedReader:被裝飾類。readLine方法不滿足需要。
MyBufferReader:裝飾類。
裝飾步驟:
1)繼承被裝飾類。BufferedReader。非
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; } }