结构模式之装饰模式注解

装饰模式主要用于对一个对象A的方法进行持续性地增强的模式。其采用多态的方式,通过一个装饰类含有下一个装饰类的引用进行不断地调用,最终会调用到最原始的那个对象A,从而使原始对象A拥有了许多其根本没有的功能。

下图为装饰模式的一个静态UML类图结构:


下面给出上面UML结构的代码参考实现。

抽象组件Component的代码如下:

public interface Component

{

    void sampleOperation();

}

具体组件即原始对象A(而要功能增强的对象)代码如下:

public class ConcreteComponent implements Component

{

    public void sampleOperation()

    {

        // Write your code here

    }

}

抽象装饰类Decorator的代码如下:

public class Decorator implements Component

{

    private Component component;

    publicDecorator(Component component)

    {

        this.component = component;

    }

 

    public Decorator() {

    }

 

    public void sampleOperation()

    {

        component.sampleOperation();

    }

}

该类这里用一个具体的类进行表示,但是在实际中,可以将其设定为抽象类会更为合理一些,同时将sampleOperation()这个方法设定为抽象方法,要求所有的具体的装饰类实现该方法。

具体装饰类ConcreteDecorator的代码如下:

public class ConcreteDecorator extends Decorator

{

    public void sampleOperation()

    {

    //可以在此处附加一些业务方面

    //....................

        super.sampleOperation();

    }

}

下面给出一个创建装饰类的典型代码:

New Decorator1(

       New Decorator2(

              New Decorator3(

                     NewConcreteComponent()

                     )

              )

       );

 

装饰模式与责任链模式有些类似,都是一个对象含有下一个对象的引用,而对客户端而言,只需要从第一个对象进行调用即可,不用关心最终是由哪一个对象进行执行的,但是二者还是有很多区别,首先,装饰模式一定是有一个最原始的对象,而其他的装饰类都是对这个原始的对象的增强的,所以通常情况下,其他装饰类的对应的方法都会被调用,一直到达最原始的这个对象。而责任链却未必会所有的责任对象都过一遍,它只要到达其所需要的地方就可以直接退出了。从本质上来看,责任链虽然前一个对象会含有后一个对象的引用,但是二者是平等的,但是装饰模式却不是,他是不平等的,最原始的那个对象是一定要被调用的,而其他的装饰对象则是对这个原始对象的增强,包装。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值