1. 程式人生 > >Decorator設計模式的實現中 裝飾設計模式學習筆記

Decorator設計模式的實現中 裝飾設計模式學習筆記

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設計模式的實現中 裝飾設計模式學習筆記