|
1
3
如果类中有任何状态,那么最好用它创建对象。在对象依赖性和线程安全性方面,单例是一个难题。 如果类中没有状态,那么选择是否使其成为静态将不会对内存占用产生明显影响。 |
|
|
2
4
从面向对象的角度来看,这取决于:-) 为了 pure functions 在爪哇/C中应该使用静态方法。在C语言中,你也可以像其他人描述的那样尝试使用扩展方法。 对于不是纯函数的实用程序方法(例如读取一些文件),您应该创建一个实例来提高可测试性(例如允许模拟)。 不同的是,后者虽然不直接保持任何状态,但它们与一些拥有自己的、可能改变状态的外部组件通信。这种外部状态可能导致这个实用程序方法随着时间的推移返回不同的结果(对于相同的输入),这使得测试和推理变得更加困难。将纯函数和这种实用方法作为显式的实例方法来区分,是一个很好的设计原则。 然而,在Java中,“模拟参数”通常需要进行反编译,因为它不允许模拟静态方法。 |
|
|
3
3
如果您使用的是.net,您是否研究过使用扩展方法?我发现,如果使用得当,我甚至可能根本不需要一个实用程序类。 |
|
|
4
0
这是.net吗?如果是,最好提供扩展方法。例如,如果您有一个格式化字符串的实用方法,请将其签名从
到
这边,那个
|
|
|
5
0
如果您的语言支持它,请将这些函数作为包/命名空间/模块的一部分,而不是类的一部分。 否则,类的静态方法就可以了。如果您的语言支持,则应该将类标记为final/closed/non-irtual/non-extensable。 如果您的语言支持它,您可以考虑为那些函数接受的类型重新定义内置类/定义,但要注意命名空间冲突。在这种情况下,请按照您选择的语言的风格指南或事实标准来选择惯用方法。 |
|
|
6
0
静态类可以满足您所描述的要求—只要注意以线程安全的方式共享任何共享状态(静态成员变量)。 |
|
|
simply lemon · python上链表的添加方法 1 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 2 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 2 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 2 年前 |