考虑一个名为Effects
的类,其中静态 ArrayList
名为effects
。
该类包含一些在所有程序中调用的静态函数,例如静态函数:Effects.addEffect(effect)
,它会为ArrayList effects
根据这一点,班级Effects
有以下几点:
根据良好的编程习惯,我应该使这个类单例,静态还是只是一个常规类,我应该在所有程序中传递一个实例?
答案 0 :(得分:2)
这一切都归结为什么是“良好的编程实践”以及更广泛的背景。
对于需要测试和mocking组件的更大,更强大的解决方案,具有静态类是非常阻碍的,因为它不容易被替换。有些人认为遵循这些指导原则 - 避免静态类并确保组件易于测试 - 可以做出更好的设计(TDD是这种哲学的一个很好的例子)。
但是,请注意,在任何地方“携带”一个实例,我们称之为IEffects
,如果您不使用Inversion of Control(IOC)和{{{{}}},可能会使您的设计“更重”且难以维护3}}(DI)用于解决依赖关系。
当我遇到这种困境时,这些是我一般会问自己的一些问题:
对任何这些问题回答是通常会导致使用接口方法而不是静态类方法。
答案 1 :(得分:1)
单例类是一个对象,可以实现可以传递给对象和回调的对象的接口。如果您不需要其中任何一个,请将其设为静态类。
答案 2 :(得分:0)
正如您所说,您应该在Effect
课程中使用静态方法。
您只有存储所有效果的静态变量。它仍然会在同一个变量中添加效果。那么为什么每次想要使用时都要为它创建对象?只需添加静态方法即可。如果您遇到多线程问题,则可以使用锁定或同步来处理它。使实例变量或实例方法访问静态变量没有意义。 你在谈论单身人士模式还是单身人士课程?