设计模式之---装饰者模式

一、模式定义
    动态地将责任附加到对象上,如果要扩展功能,装饰者提供比继承更有弹性的替代方案。

二、所体现出的设计原则
    开放-关闭原则:类应该对扩展开放,对修改关闭。

三、UML图示

四、应用场景

    1. 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
    2. 处理那些可以撤消的职责。
    3. 当不能采用生成子类的方法进行扩充时:一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

五、注意事项

    1. 装饰者和被装饰者必须派生自相同的抽象基类,这样客户无需知道一个对象到底被包装了没有,或者是被包装了多少层。装饰者会调用被装饰者的方法,并在其前或者后加上自己的方式。这样一来,行为就被扩展了,同时不必对原有代码进行修改。
    2. 装饰者模式完全遵守开放-关闭原则,其缺点是容易产生大量的装饰类。

六、举例说明

     用Junit举个例子吧(虽然偶也只会点儿皮毛,嘿嘿)。Junit中,TestDecorator 和 RepeatedTest 就是对TestCase的装饰模式扩展应用。

                                            

    这里Test 接口中定义了一个方法 public void run(TestResult result),被装饰者TestCase定义了这个方法以执行用户定义的测试用例。同时装饰者RepeatedTest也定义了这个方法,但执行方法是“连续调用TestCase的run方法N次”。

七、代码示例

    维基百科:http://zh.wikipedia.org/wiki/%E4%BF%AE%E9%A5%B0%E6%A8%A1%E5%BC%8F

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值