个人随笔
目录
七、结构型-装饰者(Decorator)模式
2020-09-09 21:34:32

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一接口,装饰对象持有被装饰对象的实例。有点类似对象适配器,不过这里不是适配,而是装饰。

1、UML

2、共同的接口Sourceable

  1. /**
  2. * 共同的接口
  3. * @author suibibk.com
  4. */
  5. public interface Sourceable {
  6. public void method();
  7. }

3、被装饰者Source

  1. /**
  2. * 被装饰着
  3. * @author suibibk.com
  4. */
  5. public class Source implements Sourceable{
  6. @Override
  7. public void method() {
  8. System.out.println("吃饭");
  9. }
  10. }

4、装饰者Decorator

  1. /**
  2. * 装饰者
  3. * @author suibibk.com
  4. */
  5. public class Decorator implements Sourceable{
  6. private Source source;
  7. public Decorator(Source source) {
  8. super();
  9. this.source = source;
  10. }
  11. @Override
  12. public void method() {
  13. System.out.println("煮饭");
  14. source.method();
  15. System.out.println("收拾碗筷");
  16. }
  17. }

这里动态的为Source的method添加了一些操作。

5、测试类Test

  1. /**
  2. * 测试类
  3. * @author suibibk.com
  4. */
  5. public class Test {
  6. public static void main(String[] args) {
  7. new Decorator(new Source()).method();
  8. }
  9. }

运行会输出如下结果:

  1. 煮饭
  2. 吃饭
  3. 收拾碗筷

总结

装饰模式的应用场景:

  1. 需要扩展一个类的功能
  2. 动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

缺点:产生过多的相似对象,不易排错,IO就是用了装饰模式,不过太多了 好难记。超级好理解且有用的一个模式。

 153

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2