隨筆 - 31  文章 - 2  trackbacks - 0
          decorator的結構如下:

          ????MyInterface
          ???????|
          _______|_______
          |?????????????|?
          Myclass?????Decorator
          ??????????____|_____
          ??????????|????????|?
          ??DecoratorA??????DecoratorB
          decorator的目的是在不改變基礎類的前提下,添加新的功能(在比較少的子類前提),Myclass是你的擴展類,decoratorA,decoratorB封裝了你要擴展的功能,并保持了
          MyInterface的引用

          考慮一下代碼
          public static void main(String[]args){
          ? MyInterface a=new Myclass();
          ??? a.print();

          }
          ?MyInterface是Myclass的接口,在 MyInterface里面就聲明了一個print方法,myclass實現了該方法
          public void print(){
          System.out.print("hello");
          }
          如果我們要實現打印 ”hello word“,”my hell“就要要寫很多類似的類,

          decorator裝飾模式的解決方法就是,只實現基本功能,附加功能都抽出來,
          public decoratorA
          implements?Decorator{
          ???
          MyInterface?myObject;
          ??? public decoratorA(MyInterface my){
          ??? ??
          myObject=my;
          ??? }
          ??? public void print(){
          ??? ?? System.out.print("
          world ");
          ??? }

          }

          public decoratorB implements?Decorator{
          ???
          MyInterface?myObject;
          ??? public decoratorB(MyInterface my){
          ??? ??
          myObject=my;
          ??? }
          ??? public void print(){
          ??? ?? System.out.print("MY
          ");
          ??? ?? ??
          myObject.print();
          ??? }

          }
          這時需要實現my hello word就比較簡單了
          public void main(String[]args){
          MyInterface a=new decoratorA (new decoratorB(new Myclass()) );
          a.print();
          }

          BufferedInputStream?bis?=?new?BufferedInputStream(new?DataInpuStream(new?FileInputStream("xxx.txt")));

          InputStream.為例:
          ? ??? ??? ??? java.io.InputStream
          ????????????????????????|
          ?_______________________|________________________
          ?|?????????????????????????????????????????????|
          ByteArrayInputStream??????????????????????FilterInputStream
          StringBufferInputStream???_____________________|____________________________
          FileInputStream???????????|????????????????|????????????????????|??????????|
          PipedInputStream??DataInputStream?BufferedInputStream??LineNumInpuStream
          PushbackInputStream

          基礎的流只有左邊4個,這些流代表了數據的來源,所有的流都必須從這四個中之一開始(注,還有一個RandomAccessFile、File,這兩個不在本文介紹范圍)。
          當我們需要什么新功能的時候就在右邊找個裝飾類,在用到緩存的時候我們就用bufferedInputStream

          BufferdInputStream?is?=?new?BufferedInputStream(new?FileInputStream("xxx.txt"));


          假如再要DataInputStream的功能,只要在加一層:
          DataInputStream?dis?=?new?DataInputStream(new?BufferdInputStream(new?FileInputStream));




















          posted on 2008-04-20 11:35 緣來如此 閱讀(352) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 左贡县| 东台市| 富宁县| 乌审旗| 儋州市| 邵阳县| 平顺县| 云和县| 翁源县| 朝阳区| 江山市| 德安县| 津市市| 长岛县| 休宁县| 靖江市| 建昌县| 军事| 通渭县| 梁河县| 榆林市| 乐业县| 汶上县| 偃师市| 宿州市| 威宁| 竹溪县| 长岭县| 潼南县| 广元市| 南皮县| 宁乡县| 北辰区| 来凤县| 桃园市| 东乌珠穆沁旗| 奉化市| 曲水县| 海安县| 霍山县| 铜鼓县|