结构型模式——装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)属于结构型模式,该模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代方案。

使用

在Java中的使用

(配合uml图)

//基础操作接口(组件)
interface Component {
    public void sampleOpreation();
}
//具体操作,被装饰类(具体构建)
class ConcreteComponent implements Component {
    @Override
    public void sampleOpreation() {
        // TODO 具体的基础相关代码
    }
}
//装饰类,拥有被装饰类实例(装饰)
public class Decorator implements Component {
    private Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void sampleOpreation() {
        //委派给构件
        component.sampleOpreation();
    }
}
//具体装饰类,继承自装饰类,在该类中具体给被装饰类装饰。
class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public void sampleOpreation() {
        super.sampleOpreation();
        //TODO 在基础代码实现的逻辑下实现拓展的操作
    }
}
//同上,逻辑,与之不同的装饰操作
class ConcreteDecoratorB extends Decorator {
    public ConcreteDecoratorB(Component component) {
        super(component);
    }
    @Override
    public void sampleOpreation() {
        super.sampleOpreation();
        //TODO 在基础代码实现的逻辑下实现拓展的操作
    }
}

简介

目的:
  • 在完成基础功能的前提下,动态地给一个对象添加一些额外的职责。
  • 装饰器模式相比生成子类更为灵活的增加功能。
主要解决:
  • 为了扩展一个类经常使用继承方式实现时,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
何时使用:
  • 在不想增加很多子类的情况下扩展类。
如何解决:
  • 将具体功能职责划分作为具体装饰
UML

装饰器模式

角色
  • 抽象构件(Component):抽象接口,定义具体操作的接口。
  • 具体构件(ConcreteComponent):被装饰的类,实现了抽象构件(Component)
  • 装饰(Decorator):实现了一个与抽象构件(Component)接口一致的接口,并且其中有一个抽象构件对象的实例。
  • 具体装饰(ConcreteDecorator):负责给构件对象添加附加责任。
优缺点
优点:
  • 装饰类和被装饰类独立,互相无需知道对方的存在
  • 装饰器模式是继承的一个替代模式,装饰器模式可以实现动态扩展,只要继承了装饰器就可以动态扩展想要的功能了。
缺点:
  • 多层装饰比较复杂,提高了系统的复杂度。
使用场景:
  1. 扩展一个类的功能。
  2. 动态增加功能,动态撤销。
  3. 在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责
  4. 处理那些可以撤销的职责
  5. 当使用子类扩展的方式被束缚时(单继承),可考虑使用装饰器模式
    的功能。
  6. 动态增加功能,动态撤销。
  7. 在不影响其它对象的情况下,以动态、透明的方式给单个对象添加职责
  8. 处理那些可以撤销的职责
  9. 当使用子类扩展的方式被束缚时(单继承),可考虑使用装饰器模式
  10. Java IO包中的类设计运用了装饰器模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值