说,我想要这个方法,它需要一个 Set 并根据一些逻辑将其格式化为一个字符串。例如。
public String formatCustomerSet(final Set<Customer> customers) {
String result = "";
for (Customer customer : customers) {
result += customer.getFirstName() + " : " + customer.getLastName() + "\n";
}
return result;
}
我在几个类中使用此代码。现在,我应该把这个放在哪里?我发现应该避免使用实用程序类,不应该使用?https://lostechies.com/chrismissal/2009/06/01/anti-patterns-and-worst-practices-utils-class/
那么,是否应该使用具有特定名称(如 CustomerFormatter)的 Util 类,还是应该使用它创建一个 OOP 类?推荐哪一个,为什么?
最佳答案
我不同意应避免使用 util 类的事实。拥有一个包含纯实用程序的静态方法的类是非常好的。有时函数或操作应该只是函数或操作。并不总是需要将它们与某些抽象对象类型或其他东西相关联。
但是,我同意的是,在制作实用程序类时,您应该严格定义该类将提供哪些类型的实用程序。如果你有一堆与做数学运算相关的静态方法,你可以创建一个 util 类 ExtendedMath
.如果你做了大量的数学课而这门课变得太肥了,试着进一步完善它。按数学类型对它们进行分组,例如 Algebra
和 Vector
.
最后,它大多只是试图使用常识。函数成为对象的一部分是否有意义,或者它可以只是一个任意操作?
在您的情况下,您必须问自己一个问题:“我想创建我的代码对 formatCustomerSet
实现的硬依赖吗?”。如果您 100% 确定您将始终以完全相同的方式格式化客户集,并且您永远不需要不同的格式化程序,那么使用静态方法可能是可以的。如果没有,那么最好把它放在 CustomerSetFormatter
上。类作为非静态函数。
我不能给你一个是或不是的答案,因为你必须自己权衡利弊。只需考虑以下事项:
Class A
这需要客户格式化程序。你能做的,是你可以做一个interface CustomerFormatter
.在 Class A
然后定义一个构造函数:A(CustomerFormatter formatter)
.这允许你做的是重用 Class A
使用不同的 CustomerFormatter
实现。这大大增加了 Class A
的可重用性.使用静态函数时,这不再可能。 Math
中定义的函数,例如 min()
、 max()
、 ceil()
或 floor()
)完全保证是静态函数。他们做一件常用的事,而且只做一件事。通常,您可以以这样的函数为例,说明何时完全需要使用静态方法。 我希望这对你有所帮助。
关于java - Java 中静态 Util 类和方法的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068322/