设计模式-装饰模式简单理解

Posted onetwothree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-装饰模式简单理解相关的知识,希望对你有一定的参考价值。

装饰模式是一种比较简单的模式,为什么要用它呢?怎么用呢?

前期需求:实现三个了A B C,定义相同的调用方法,客户可以有选择的调用任意一个。

我知道对接口编程,于是我定义了一个接口

interface O{

   public void do();

}

然后我根据需求定义三个O的实现:A,B,C。

接下来的剧情:

  1. 新需求来了:客户要在O的实现对象上增加功能F1或F2或F3。

  怎么做?现在只有A B C三个,我用if else加上F1 F2 F3的支持:

    if(1) do F1 else if (2) do F2 else if(3) do F3;

    OK了!

  2. 新需求又来了:O的实现类要增加 X ,Y, Z。

  怎么做?我增加三个实现类,然后在实现类上再加上if else支持F1 F2 F3。

  3. 新需求又又来了:功能需要增加对F4 F5 F6的支持。

  怎么做?我再把O的所有的实现类再改一遍,加上if else支持F4 F5 F6。改完了,好累啊!!!但愿需求不要再变化。。。

 

本来生活可以很简单的呀!我也可以这样做:

反转的剧情:

  1. 新需求来了:客户要在O的实现对象上增加功能F1或F2或F3。

  怎么做?

  class F1 implements O{

    O o = null;

    public F1(O o){this.o = o;}

    public void do(){

             o.do();

     do something about F1

    }
  }

  同样F2 F3也这么做。

  如果用户要用F1的功能的话就可以:new F1(o).do(); ----o为被装饰的对象

  如果要用F1,F2功能:new F2(new F1(o)).do();

  如果要用F1,F2,F3功能:new F3(new F2(new F1(o))).do();

  2. 新需求又来了:O的实现类要增加 X ,Y, Z。

  怎么做?我只需要增加三个类 X Y Z,实现O接口就好了,至于你怎么用,自己装饰去吧!

  3. 新需求来了:功能需要增加对F4 F5 F6的支持。

  怎么做?简单,跟F1的定义类似啊,分分钟搞定。至于你怎么用,自己装饰去吧!

 

^^) ,这种俄罗斯套娃模式是不是有种似曾相识的感觉呢?java IO中输入输出流

采用装饰模式可以把装饰类和被装饰的类解耦,二者都可以增加新的类,而彼此不受影响。Client调用时决定装饰类和被装饰类之间关系。

 


以上是关于设计模式-装饰模式简单理解的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-装饰模式简单理解

装饰者模式

简单说说装饰模式

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。