Should a single object used throughout the app be static?
我正在编写一个C应用程序,它基于历史价格分析股票。我有一个保存数据的对象(历史价格)。所有的数据都保存在这个对象中——我只需要它的一个实例,并且数据在整个应用程序中被许多其他对象使用。
考虑到上面的内容,使这个对象静态化不是更容易(也是更好的设计)吗?因为另一种选择是我目前正在做的——在对象之间传递对同一个实例的数十个引用。
我之所以犹豫不决,是因为我知道应该认真对待
在我的案例中,你认为最好的方法是什么?有没有其他解决方案我没有考虑?
您可以将其设置为静态的或使用单例设计模式。我会用单件的。
不需要传递引用,singleton提供全局访问点。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton GetInstance() { if(instance == null) instance = new Singleton(); return instance; } } |
私有构造函数和
如果需要获取对对象的引用以调用对象内部的函数,只需使用以下命令:
1 | Singleton.GetInstance().FunctionName(); |
此外,这是一个懒惰的实例,而不是线程安全的(多线程程序),但您可以自己了解更多,应该很有趣!
如果您的对象有一个状态,那么我建议使用依赖注入设计模式,而不是使其为静态或单体。
这样,你可以用不同的对象来替换这个对象或类,这取决于环境,例如生产代码的一个类,另一个用于测试。
实例可以在各种依赖注入样式中解决,例如
构造注入
属性注入
控制容器反转(如CommonServiceLocator)
配置文件
在所有这些选项中,您使用要使用的公共契约定义接口或基类,然后确定在使用代码之外实现接口的实际类/实例,这样您就可以在不更改该代码的情况下更改决策。
为了你想要的,我会说"单身"。一切都取决于个人喜好。static使其成为无法实例化类的对象,因此使用classname.mymethod()。如果您的数据检索不是在构造器中完成的,并且您使用一个方法来提取数据,那么这很好。如果您的构造函数有连接凭据,您需要将其移到可以调用的新方法中。单实例可以限制为单个实例。你可以测试两者,看看哪一个最适合你。
使用单例模式怎么样?http://en.wikipedia.org/wiki/singleton_模式不必传递引用。这可能有助于更容易地再次更改设计。