使用装饰器模式拓展基类和直接继承基类的区别

装饰器(Decorator)通过包装(不是继承)的方式向目标对象中动态地添加或删除功能。在软件开发中,开发人员一般是通过静态继承方式让子类扩展新的行为,这样做要求子类对父类的继承是静态扩展,需要知道具体的父类型;而且,当扩展功能数量巨大,或有不同的功能组合时,子类数量会急剧增加。使用子类扩展的方式,可以向目标类型添加新的功能;但这种添加新功能的方式是静态扩展的,而不是动态变化的。一旦将对象指向具有扩展功能的实例时,该对象就无法去除掉扩展的功能。

最近读书,读到装饰器模式,有以上这样一段话,在此记录一下对于装饰器模式的理解:

以下是装饰器模式的类结构图

我们需要注意的有几点:

  • 所有的装饰器对象,都保存着一个Component类型的对象,所以,在装饰器内部,如果要拓展功能,调用的都是Component接口中定义的操作;
  • 当我们需要将两个装饰器(假设为A、B)的拓展功能进行组合时,就可以首先使用一个Component对象来构造A类型的对象,然后将A类型的对象作为Component对象来构造B,由于A和B调用的都是Component接口中定义的操作,因此使用A类对象构造B是完全可以的,这样B类型对象中,就同时拥有的A的拓展功能和B的拓展功能。

推荐阅读https://refactoringguru.cn/design-patterns/decorator

 

posted @ 2022-03-22 20:45  您的快递已经揽件成功  阅读(128)  评论(0)    收藏  举报