装饰器模式(Java)

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

该设计模式是使用组合替代继承的具体实现。

使用装饰器模式

不修改电话类的情况下增加电话录音功能

interface Phone {
    void call();
    void receive();
}

class TelePhone implements Phone {

    @Override
    public void call() {
        System.out.println("打电话 ...... ");
    }

    @Override
    public void receive() {
        System.out.println("接电话 ...... ");
    }
}

/*
 * 使用装饰器模式给电话增加录音功能
 */ 
class PhoneRecordDecorator implements Phone {

    private Phone phone;

    public PhoneRecordDecorator(Phone phone) {
        this.phone = phone;
    }

    @Override
    public void call() {
        System.out.println("开启录音");
        phone.call();
        System.out.println("结束录音");
    }

    @Override
    public void receive() {
        System.out.println("开启录音");
        phone.receive();
        System.out.println("结束录音");
    }
}

class PhoneTest {
    public static void main(String[] args) {
        Phone phone = new PhoneRecordDecorator(new TelePhone());
        phone.call();
    }
}
装饰器模式在Java IO类中的使用
//文件字节流读取类
InputStream in = new FileInputStream("./test.txt");

//在不修改FileInputStream的情况下,给FileInputStream增加缓存功能
InputStream bin = new BufferedInputStream(in);

//在不修改FileInputStream的情况下,让FileInputStream支持按照基本数据类型来读取数据,例如int, boolean, long等
InputStream din = new DataInputStream(in);

//还有其他的这里就不一一列举了。。。。

试想一下,如果不使用组合而是使用继承,有的子类增强一个功能,有的子类可能需要增强多个功能,这样的话就需要派生出很多子类,类的继承机构将会变得无比复杂,代码及不好扩展也不好维护。

总结

装饰器模式主要解决继承关系过于复杂得问题,通过组合代替继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值