Java 抽象类或静态实用程序类设计选择

标签 java design-patterns oop

我正在实现一些策略 (Strategy Pattern)它们有一些共同的行为,但尚未决定共同操作应该放在哪里。

  • 假设我有 1 个上下文和 3 个策略,策略中使用的一些操作是共享的,一些只需要 2 个,其他只是策略之一。
  • 没有成员级状态共享,因此唯一的操作实际上是无状态的。
  • 操作的目的是支持将状态格式化为文件,如 View 助手。

选项 1:创建一个 AbstractStrategy 类

  • 我正在使用 Java,所以马上 在 future 。
  • 继承趋于结果。 在山脊结构中。
  • 操作将是最终的。

选项 2:创建静态助手的 Util 类

  • 灵活,但出于某种原因感觉有点代码味。
  • 没有脊。

有什么建议或偏好吗?

请注意,我工作的级别是策略级别,而不是上下文级别(请参阅维基百科链接)。

最佳答案

有一个原因......一个巨大的原因......在抽象类或接口(interface)上使用静态 Util 类。

因此您可以在以后添加更多方法。

对于抽象类或接口(interface),您对该类/接口(interface)所做的任何更改都必须在从它继承的所有类中进行更改。如果您正在编写公共(public) API,这尤其成问题。

Java 框架有实用类,静态方法分散在各处。最著名的在 java.util 中。包裹:CollectionsArrays .

关于Java 抽象类或静态实用程序类设计选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336258/

相关文章:

java - 写入文本文件

c++ - 如何在不弄乱图书馆内部访问的情况下正确设计图书馆的外部访问?

java - 如何从 Java 中的匿名内部类中获取对封闭类的引用?

java - 我需要在两个类中使用一个方法。哪种方法是好的做法?使方法公开、使其静态、使方法重复

java - OpenGL 淡出/淡入不起作用

java - Android SDK Eclipse Debug模式

c# - 如何开始使用 MVVM 模型实现串口控制?

c++ - 为什么此代码在第 1 行显示错误左值?如何解决?

java - SIP 服务器中的身份验证问题

c# - 复杂 silverlight 游戏的最佳设计模式