对软件构造中装饰器设计模式的一点疑问

装饰模式的设计理念主要是以对客户端透明的方式动态扩展对象的功能,是继承关系的一个替代(继承会产生大量的子类,而且代码有冗余)。装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。装饰模式把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展完全是透明的(装饰模式的透明性要求客户端程序不应该将对象声明为具体构件类型或具体装饰类型,而应该全部声明为抽象构件类型)。
这样Decorator模式应运而生,即一种可以随意组合穿搭的模式。
装饰器的概念其实不难理解,但应用到实际当中时我发现这样一种问题——它只能扩展某一函数的功能,而不能增加一个新的功能函数。
搜索网上的例子,如下所示。
对软件构造中装饰器设计模式的一点疑问
对软件构造中装饰器设计模式的一点疑问
对软件构造中装饰器设计模式的一点疑问
可以看出,这些应用都有着这样的共同点——它们都是在扩展某一函数的功能,而不是为ADT增加函数。
实际上,后者才是我们更为切实的需求。显然装饰器模式并不能满足这一需求,我认为它存在缺陷。