java中装饰者模式

java中装饰者模式

package com.company01.Decorator;

public abstract class Reader {
    public abstract void close();
}

package com.company01.Decorator;
/*
    需求:对FileReader类中close()方法进行扩展,并且不能改变FileReader

        1.使用继承(但是关联性太强了,代码耦合度太高,不利于项目的扩展。)-->可以理解为 父子关系

        2.这里介绍一种方法:装饰者模式。-->可以理解为朋友之间的关系
*/
public class FileReader extends Reader {
    public void close(){
        System.out.println("FileReader closed!");
    }
}

package com.company01.Decorator;
/*
    使用BufferedReader对FileReader中的close方法进行扩展

    1.装饰者模式中要求:装饰者中含有被装饰者的引用
    2.装饰者模式中要求:装饰者和被装饰者应该实现同一个接口或者类型。
*/

public class BufferedReader extends Reader{  // BufferedReader 装饰者

    //FileReader reader;    // FileReader 就是被装饰者
    // 这里也可以使用多态
    Reader reader;

    // Constructor
    //BufferedReader(FileReader reader){
    BufferedReader(Reader reader){
        this.reader = reader;
    }

    // 对FileReader中的close方法进行扩展
    public void close(){
        //扩展
        System.out.println("扩展代码1");
        reader.close();
        System.out.println("扩展代码2");
    }
}

package com.company01.Decorator;
/*
    【注】通过这个例子明白:

        为什么在前面讲的 包装流 或者 处理流 中,只需要关闭外层的流就可以了,不需要关闭内层的。
        这是因为装饰者模式

*/
public class DecoratorTest {
    public static void main(String[] args) {

        /*
        // 1.创建被装饰者
        FileReader fr = new FileReader();

        // 2.创建装饰者
        BufferedReader br = new BufferedReader(fr);
        */

        // 其实就是
        BufferedReader br = new BufferedReader(new FileReader());

        // 3.通过执行装饰者中的方法间接去执行被装饰者中的方法
        br.close();

        /*
        扩展代码1
        FileReader closed!
        扩展代码2
        */

    }


}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值