Decorator設計模式的實現中 裝飾設計模式學習筆記
阿新 • • 發佈:2018-04-19
Decorator設計模式的實現中 裝飾裝飾設計模式
a)當某個類的某個方法不適應當前業務的需要
思路:
》擴展父類的可供擴展的方法,可以使有,但不優
》裝飾設計模式(推薦)
開發步驟:
1)寫一個普通類或寫一個普通類擴展[extends]一個父類
2)寫一個需要被包裝的實例變量
3)通過構造方式為被包裝的實例變量賦值
4)對於不 滿足需求的方法,重寫父類的相關方法
5)對於滿足需求的方法,直接調用被包裝的對象 [可選]
java
package cn.xijie.decorator; import java.io.BufferedReader; /**使用Decorator設計模式為BufferedReader類的readLine方法添加行號的功能*/ //將BufferedReader進行必包的包裝/裝飾 public class MyBufferedReader { private BufferedReader br; private int no; //行號 public MyBufferedReader(BufferedReader br){ this.br = br; } //重寫父對象的方法 public String readLine() throws Exception{ String line = null; line = br.readLine(); if(line!=null){ no++; line = no + ":" + line; } return line; } //直接使用父對象的方法 public void close() throws Exception{ br.close(); } }
測試類:
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Reader; import org.junit.Test; import cn.xijie.decorator.MyBufferedReader; public class DecoratorTest { //readLine方法添加行號的功能。 @Test public void DecoratorTST() throws Exception { Reader r = new FileReader(new File("d:\\abc.txt")); BufferedReader br = new BufferedReader(r); MyBufferedReader mbr = new MyBufferedReader(br); String line = null; while ((line = mbr.readLine()) != null) { System.out.println(line); } mbr.close(); } }
Decorator設計模式的實現中 裝飾設計模式學習筆記