9、装饰器模式

装饰器模式:在不改变类结构的情况下,增添一部分新功能。

传统的装饰器模式基于继承实现,其中它主要包含以下几部分:

  • 抽象构件:规范职责
  • 具体构件:实现抽象构件
  • 抽象装饰:实现抽象构件,并包含具体构件实例,通过其子类扩展具体构件的功能
  • 具体装饰: 继承抽象装饰,实体具体增强方法

代码结构如下:

interface Component {
    void operation();
}

class ConcreteComponent implements Component {

    public ConcreteComponent() {
        System.out.println("具体构件角色被创建");
    }

    @Override
    public void operation() {
        System.out.println("调用具体构件角色 operation() 方法");
    }
}

class AbstractDecorator implements Component {

    private Component component;

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

    @Override
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends AbstractDecorator {

    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        addedFunction();
    }

    public void addedFunction() {
        System.out.println("为具体构件角色额外增加的方法:addedFunction()");
    }

}

从结果可以看出,装饰器模式和代理模式很像,都是为了增强功能,但从设计初衷来说,两种包含以下区别:

  • 装饰器类的创建基于具体实现对象,也就是说需要增强哪个对象,再传哪个对象,而代理模式代理类中对象的创建在构造方法中进行,无须选择对象。也就是说:装饰器模式重点在于增强哪个对象,而代理模式重点在于具体增强方法的实现,两者侧重点不同。

其它层面来分析多少有点咬文嚼字,这里我们不再展开。总得来说,设计模式只是设计代码的一种规范,并没有明确的界限和区别,无论代理还是装饰器,系统中哪个好用,更符合预期效果就用哪个,没有必须分个高低出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值