IO流中出现的装饰设计模式

本文详细解释了装饰设计模式在IO流中如何通过BuffeReader和BuffeWriter实现对FileReader和FileWriter的功能扩展。通过实例展示了装饰模式在避免冗余类和灵活扩展功能方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


IO流的Reader,Writer的子类BuffeReader,BuffeWriter分别对FileReader,FileWriter的功能扩展;这种设计模式属于装饰设计模式。

装饰设计模式:当想要对已有的对象进行功能增强时,可以这样定义类,将已有对象传入,基于已有的功能,并提供加强功                                          能, 那么自定义的该类称为装饰类;装饰类通常会通过构造方法接受被装饰的对象;并基于被装饰的对象的功                                           能,提供更强的功能。


class Person {

  public void chifan()
    {
        System.out.println("吃饭");
    }
 


}
class SuperPerson

private Person p;
SuperPerson(Person p){
this.p = p;
}
public void superChifan(){
System.out.println("开胃菜");
p.chifan();
System.out.println("甜点");
System.out.println("来一根");
}
}

class PersonDemo{
public static void main(String[] args){
Person p = new Person ();
SuperPerson sp = new SuperPerson(p);
sp.superChifan();
}
}

看到这里,就会有个疑问,为什么不直接继承,干嘛要用装饰设计模式?

举例:MyReader 一个专门用于读取数据的类。它有很多歌子类用于读取不同类型数据,如:MyTextReader,MyMediaReader,MyDataReader等等;

          如果用继承的方法进行功能扩展,则需要给每个类写个子类,如果有100个子类,难道还要写100个子类?显然用继承的方法麻烦。

        MyReader

                |--MyTextReader

                         |--MyBufferTextReader

                |--MyMediaReader

                          |--MyBufferMediaReader

                |--MyDataReader

                          |--MyBufferDataReader

而用装饰设计模式,写一个MyReader 的子类MyBufferReader,这个子类可以对其它每个子类进行功能扩展

      MyReader

                |--MyTextReader

                |--MyMediaReader

                |--MyDataReader

                 |--MyBufferReader

                      




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值