【设计模式】装饰模式


装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

 


      马云最近看上一个60平小户型的房子,于是等到攒够钱后兴致勃勃的去找中介看了看房,讨价还价后,最终拍板买了下来。

 

      买完后马云突然想到:哎呀,还得装修呢,又得花5万,心痛啊,2分钟的工资没啦!但是没办法啊,装吧。马云找到了装修公司,最终以4万9千8百45元达成协议,于是工人们开始动工了

 

      上面的故事可以看出,马云买的只是一套裸房,无疑还有一项艰巨的任务---装修。进行装修并没有改变马云房屋用于居住的本质,但装修过后可以让房子变得更加漂亮。仔细一想,特别像我们的开放封闭原则:只扩展,不修改。

 

      在我们编程时用到开放封闭原则,这没有毛病,任何事都不是完美的,开闭原则有时也会出现系统扩展非常麻烦,在某些编程语言中无法实现,代码重复。如果增加新的控件或新的扩展功能系统都需要增加大量的具体类,将导致系统变得非常庞大。如何让系统中的类可以进行扩展但又不会导致类数目的急剧增加?

 

      是时候装饰模式上场了,它是一种用于替代继承的技术(用到开闭原则就会有继承)。如果需要在原有系统中增加一个新的具体构件类或者新的具体装饰类,无须修改现有类库代码,只需将它们分别作为抽象构件类或抽象装饰类的子类。使用之后将大大减少了子类的个数,让系统扩展起来更加方便,而且更容易维护。


  结构图

      

【设计模式】装饰模式


 

装饰模式的装饰顺序很重要哦!!!