我不明白得到单例类和静态类有什么区别?任何人都可以用例子详细说明吗?
我是初学者和编程人员.我有一个简单的问题 - 关于静态/非静态变量的最佳实践是什么.
我有一个变量private int x,它属于y类.要访问此变量,我需要引用y.如果x是静态的,我可以访问此变量而不引用y.
在类y中的几个方法将引用此值的情况下,哪种方法最好?
希望这是有道理的,我的问题不是太基础!
非常感谢
我不确定如何模拟枚举单例类.
public enum SingletonObject{
INSTANCE;
private int num;
protected setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
Run Code Online (Sandbox Code Playgroud)
我想在上面的例子中存根getNum(),但我无法弄清楚如何模拟实际的SingletonObject类.我认为使用Powermock准备测试会有所帮助,因为枚举本身就是最终的.
//... rest of test code
@Test
public void test() {
PowerMockito.mock(SingletonObject.class);
when(SingletonObject.INSTANCE.getNum()).thenReturn(1); //does not work
}
Run Code Online (Sandbox Code Playgroud)
这是使用PowerMockMockito 1.4.10和Mockito 1.8.5.
如果我有一个类,我期望在一个对内存敏感的应用程序中的数千个实例中使用它,如果我将静态功能分解为静态成员会有帮助吗?
我想静态方法和变量每个类存储一次,而对于非静态成员,必须为每个实例存储一些东西.
使用成员变量,似乎很清楚,但是为方法存储了哪种数据?
我正在使用Java,但我想象一些适用于其他托管环境(例如.NET)的通用规则.
可能重复:
静态类和单例模式之间的区别?
哪个在Java中更好,
实现公共静态方法,比如
Factory.createLoginRequest()
Run Code Online (Sandbox Code Playgroud)
或者实现Singleton模式,比如
Factory.getInstance().createLoginRequest()
Run Code Online (Sandbox Code Playgroud)
(Boths将返回一个Request对象.)
哪一个更好,为什么?
尽管有关该主题的许多主题,我仍然不清楚何时选择哪种方法.我希望通过讨论一个具体的例子,我终于"明白了".
注意:我的语言是Cocoa,尽管一般问题不是语言特定的.
我有一个类TaskQueue,我想用它:
首次使用TaskQueue时,我希望TaskQueue启动一个线程,然后定期唤醒该线程来处理任务.
显然,我至少需要两个变量:
由于我只需要一个任务队列和一个线程来处理这些任务,我有两个选择:
做任务队列一个单独的类(如描述例如使用CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html,我相信我将不得不修改CWLSynthesizeSingleton. h文件在初始化时启动线程.)
让任务数组和线程实例都是静态的(遵循这里建议的方法:如何在Objective-C中声明类级属性?)
在这个特定情况下,是否有一种方法比另一种方法更好?如果是这样,为什么?
可能重复:
静态类和单例模式之间的区别?
只是想知道单例和静态类的区别究竟是什么?
使用C#实现的Singleton可以是:
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用静态来实现它像:
public static class Globals{
public static Singleton Instance = new Singleton();
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,app也应该只获得整个应用程序的一个实例.那么这两种方法之间的区别是什么?为什么不直接使用静态成员(更简单直接)?