Decorator设计模式的实现中 装饰设计模式学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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设计模式的实现中 装饰设计模式学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

装饰器模式-Decorator(Java实现)

c++ 设计模式6 (Decorator 装饰模式)

装饰模式(Decorator Pattern)

设计模式之——Decorator模式

Java设计模式之Decorator模式

设计模式c++实现:装饰(Decorator)模式