设计模式——7装饰模式(Decorator)-阿里云开发者社区

开发者社区> 开发与运维> 正文

设计模式——7装饰模式(Decorator)

简介: 装饰模式(Decorator)

7、装饰模式(Decorator)
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下:
[java] view plaincopy

  1. public interface Sourceable {
  2. public void method();
  3. }
    [java] view plaincopy
  4. public class Source implements Sourceable {
  5. @Override
  6. public void method() {
  7. System.out.println("the original method!");
  8. }
  9. }
    [java] view plaincopy
  10. public class Decorator implements Sourceable {
  11. private Sourceable source;
  12. public Decorator(Sourceable source){
  13. super();
  14. this.source = source;
  15. }
  16. @Override
  17. public void method() {
  18. System.out.println("before decorator!");
  19. source.method();
  20. System.out.println("after decorator!");
  21. }
  22. }
    测试类:

[java] view plaincopy

  1. public class DecoratorTest {
  2. public static void main(String[] args) {
  3. Sourceable source = new Source();
  4. Sourceable obj = new Decorator(source);
  5. obj.method();
  6. }
  7. }
    输出:

before decorator!
the original method!
after decorator!
装饰器模式的应用场景:
1、需要扩展一个类的功能。
2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章