天天看点

装饰模式

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

    举例:有一家咖啡厅,主要饮料有咖啡,牛奶等。配料有糖,椰果等。每一款饮料都可以加入不限配料,但只有一款主饮。

    此时,针对饮料有一个抽象类

咖啡,牛奶的实现如下:

为了实现装饰模式,每一款配料都有一个基本抽象类,此抽象类继承自beverage,但重写了getDescription方法,用于输出整个装饰中所有的主料和配料名称。

在具体装饰类中,聚合了被装饰的饮料。如下:

同样,更深层次的包装也可以这么实现:

可以看出,无论装饰多少层,所有的实现,其实都是一样的。

以下是测试代码:

以上就是全部源码,装饰类的典型应用就是I/O中streamBuffer等。

继续阅读