设计模式-装饰器模式

角色:被装饰者接口、被装饰者实现类、装饰者抽象类,装饰者实现类。

装饰者抽象类实现被装饰者接口,并持有一个被装饰者接口类型的对象,在继承的方法中先调用被装饰者对象的方法,再调用装饰者的代码。

本质跟AOP很像,不改变被装饰类,用装饰类来扩展被装饰类的功能。像俄罗斯套娃一样可以不停的叠加装饰器。也可以随时抽取被装饰对象直接调用被装饰对象原方法,实现撤销装饰的功能,如果有多层装饰,可以采用递归方法获取被装饰者。

Java中常用的例子:文件输入流作为被装饰类,

FileInputStream in = new FileInputStream();
它的装饰类有:
缓冲输入流 in = new BufferedInputStream(in)。
字符输入流 Reader reader = new InputStreamReader(in);
字符缓冲输入流 BufferedReader br = new BufferedRead(reader);
所有设计模式的目的都是代码复用和对象解耦

在这里插入图片描述

interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("Core functionality");
    }
}

abstract class Decorator implements Component {
    protected Component component;
    public Decorator(Component c) {
        this.component = c;
    }
}

class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component c) {
        super(c);
    }
    
    @Override
    public void operation() {
        component.operation();
        addedBehavior();
    }
    
    private void addedBehavior() {
        System.out.println("Added behavior");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值