在Java这样的编程语言中,模板类设计模式和通用模板类之间有什么区别?

在Java这样的编程语言中,模板类设计模式和通用模板类之间有什么区别?,java,design-patterns,template-classes,Java,Design Patterns,Template Classes,我正在学习设计模式的这门基础课程,它解释了“模板和钩子模式”,从“模板方法模式”开始,然后是“模板类模式”,最后是“通用模板类模式” 我仍然不清楚的是“泛型模板类”到底增加了什么 下面是如何解释的: 我们到底在哪里看到了静态泛型扩展?类型参数通常比直接继承具有的优势是,您在编译时就知道了类型。实例化TemplateClass时,必须指定类型参数T,这就是获得类型安全性的方式。另一种选择是TemplateClass接受HookClass实现作为依赖项或其他东西,并且在运行时之前您无法知道具体的类

我正在学习设计模式的这门基础课程,它解释了“模板和钩子模式”,从“模板方法模式”开始,然后是“模板类模式”,最后是“通用模板类模式”

我仍然不清楚的是“泛型模板类”到底增加了什么

下面是如何解释的:


我们到底在哪里看到了静态泛型扩展?

类型参数通常比直接继承具有的优势是,您在编译时就知道了类型。实例化TemplateClass时,必须指定类型参数T,这就是获得类型安全性的方式。另一种选择是TemplateClass接受HookClass实现作为依赖项或其他东西,并且在运行时之前您无法知道具体的类型。在您的关系图中还有一个小的表示不匹配。在ConcreteTemplateHookClassA和ConcreteTemplateHookClassB中,字段hookObject的类型应分别为
ConcreteHookValueA
ConcreteHookValueB
,而不是A和B。这与在声明具体子类时提供的泛型类型替换相匹配。在我看来,这似乎是一种反模式:它似乎违反了依赖项反转原则。对
HookClass
的具体类型的依赖性表明类型层次结构中存在错误。类型参数通常比直接继承的优势在于您在编译时知道类型。实例化TemplateClass时,必须指定类型参数T,这就是获得类型安全性的方式。另一种选择是TemplateClass接受HookClass实现作为依赖项或其他东西,并且在运行时之前您无法知道具体的类型。在您的关系图中还有一个小的表示不匹配。在ConcreteTemplateHookClassA和ConcreteTemplateHookClassB中,字段hookObject的类型应分别为
ConcreteHookValueA
ConcreteHookValueB
,而不是A和B。这与在声明具体子类时提供的泛型类型替换相匹配。在我看来,这似乎是一种反模式:它似乎违反了依赖项反转原则。依赖于
HookClass
的具体类型表示类型层次结构中存在错误。