设计模式——装饰者模式

为何使用装饰者模式?java

好比说,咱们如今须要一杯奶茶,以后咱们还想往奶茶里加入珍珠,椰果。spa

可是若是直接修改奶茶的类,不符合咱们尽可能少修改原类的原则。设计

因此咱们须要一种不须要修改原类,就能够为原类增添新属性的方法。对象

什么是装饰者模式?继承

定义:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。io

装饰模式是在没必要改变原类文件和使用继承的状况下,动态地扩展一个对象的功能。它是经过建立一个包装对象,也就是装饰来包裹真实的对象。扩展

设计原则:类应该对扩展开放,对修改关闭。程序

实现方法

装饰者和被装饰者之间必须是同样的类型,也就是要有共同的父类。由于装饰者和被装饰者是同一个类型,所以装饰者能够取代被装饰者,这样就使被装饰者拥有了装饰者独有的行为。根据装饰者模式的理念,咱们能够在任什么时候候,实现新的装饰者增长新的行为。若是是用继承,每当须要增长新的行为时,就要修改原程序了。im

问题解决

咱们可让奶茶和CondimentDecorator都有共同的父类Beverage,以后再由CondimentDecorator派生出珍珠、椰果等做料的子类。

若是咱们要加入珍珠,咱们能够直接将奶茶(或者已经添加了一些属性的奶茶)做为珍珠实例的一个属性,也即Decorateor中必有一个指向父类Beverage的属性。

也正由于奶茶和佐料都用共同的父类,因此佐料实例能够直接取代奶茶实例。

应用如:输入输出流的一层层包装

java.io.BufferedReader; java.io.FileReader; java.io.Reader;

相关文章
相关标签/搜索