看下面的代码:
public class Foo {
private static Foo sigleton=new Foo();
private static int count1;
private static int count2=0;
private Foo (){
count1++;
count2++;
}
public static Foo getInstance(){
return sigleton;
}
public static void main(String[] args) {
//Foo f= Foo.getInstance(); // case 1
//Foo f= new Foo(); // case 2
System.out.println(f.count1);
System.out.println(f.count2);
}
}
Run Code Online (Sandbox Code Playgroud)
对于每次运行,取消注释main方法中的一行.
为什么案例1和2的输出不同?
可能重复:
用其他方式破解单例
任何人都可以告诉我什么时候Singleton不能作为一个Singleton?
我正在尝试使用Spring为我的网站创建一个缓存类,并将以下代码添加到我的applicationContect.xml文件中:
<bean id="SiteCache" class="Cache.SiteCache">
Run Code Online (Sandbox Code Playgroud)
我不确定的是如何初始化这个类.我是否需要自己初始化它,或者当网站加载时Spring会处理它吗?如果是这样,我将如何接受构造函数中的参数?
我希望这个类大部分时间都可以使用,作为访问变量来填充站点的一种更快的方法,但我需要一种方法来检查是否有一个实例,以便我可以加载XML文件来自其他来源.
在春天实现缓存的最佳方法是什么?
非常感谢,
我知道在java中实现单例模式的两种方法,我想知道哪一个更好,为什么.
第一种方式是:
第二种方式是:
我倾向于认为即使第二种方法是最常见的,第一种方法可能会产生更好的代码可读性,这两种方法在运行时复杂性上看起来同样有效,所以我真的没有理由为什么第二种方法更常见,认为更好的做法......
开导我!
我的模型已经实现,我正在研究一个视图.
我有一个名为Helper的类,它是我的控制器的一部分.Helper类的目的是包含模型的"主副本".其他类将调用Helper方法来请求他们自己的模型副本(整个或特定部分).Helper也是唯一允许对模型进行更改的类.
我正在处理的视图包含一个名为DrawingPanel的JPanel.DrawPanel的paint()方法被覆盖,以便在绘制自己之前从Helper检索模型.
将Helper类实现为单例是实现此目标的最佳方法,还是有更好/更简单/更优雅的方式来实现我的目标?
我想我也应该提前知道我的Helper作为单例的实现是否需要线程安全.gui是在Swing中设计的.
我有一个问题Singleton模式和线程.实施是这样的.
public class Singleton {
private static final Singleton instance = new Singleton();
private SomeClass someField;
// and another private fields
private Singleton() {
someField = new SomeClass(some args);
// init another private fields
}
public Singleton getInstance() {
return instance;
}
public void operation() {
//some operations
someField.method();
}
}
Run Code Online (Sandbox Code Playgroud)
(对不起,我不能提供真实的例子.)接下来的问题是:方法操作()线程是否安全?
可能重复:
Jon Skeet的单身人士澄清
我正在阅读Singletons,现在(也感谢SO)非常了解.
我的实现(应该是教科书)看起来像
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton(){ }
static Singleton(){ }
public static Singleton Instance { get { return instance; } }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在.NET 4.0上,我应该包含构造函数(我认为私有ctor是隐式创建的 - 但静态(可疑)是怎样的).
以下似乎也可以正常工作,但我担心它只适用于我设计的测试示例.
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
public static Singleton Instance { get { return instance; } }
}
Run Code Online (Sandbox Code Playgroud) 所以我有一个简单的单例模板基类(为了问题目的缩小):
template <typename T>
class Singleton {
public:
static T& instance() {
static T me;
return me;
}
};
Run Code Online (Sandbox Code Playgroud)
现在我想要一个"基类是单身":
class Base : public Singleton<Base> {
public:
void print() { std::cout << &instance() << std::endl; }
}
Run Code Online (Sandbox Code Playgroud)
我现在想要的是从这个基类派生子类,它们是他们自己的单例:
class A : public Base {
// ...
}
class B : public Base {
// ...
}
Run Code Online (Sandbox Code Playgroud)
当然,如果我这样做
A::instance().print();
B::instance().print();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都得到相同的地址.有没有办法实现这个目标?
如果你想知道为什么:我想编写一个ResourceManager由类继承的基类ImageManager,一个类'AudioManager'等.我希望他们不要实际共享相同的实例,但仍然只有每个经理一个实例......
好吧,我有一个GraphMaster包含许多系统范围值的单例类.我有一个GraphObject : GraphMaster具有图形特定数据的子类.通过子类化,我可以访问全局类或子类的成员.通过使用单例类,我可以在任何地方更改全局变量,并将它们反映在所有子类中.
但是,我被卡住了,因为基类的构造函数想要调用单例类的构造函数,但它不能被标记为私有.
我该如何解决这个问题?我正在尝试做什么?由于对这篇文章的回应,我走了这条道路:我可以创建一个"全局"对象来存储多个对象的变量吗?
例如,
public class GraphMasterObject {
private static GraphMasterObject instance;
private GraphMasterObject() { }
}
public static GraphMasterObject Instance {
get {
if (instance == null) instance = new GraphMasterObject();
return instance;
}
}
public int globalVar=10;
}
public class GraphObject : GraphMasterObject {
public GraphObject() {
}
public int localVar=20;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到
GraphObject go = new GraphObject();
go.globalVar <- this is 10
GraphMasterObject.Instance.globalVar = 20;
go.globalVar <- now this is …Run Code Online (Sandbox Code Playgroud) 我有一个C++类,我不断收到这个错误,虽然我有另一个用类似语法编写的类,可以毫不费力地编译.
这是我的.h:
#ifndef FISHPLAYER_H
#define FISHPLAYER_H
#include "Player.h"
class FishPlayer : public Player
{
public:
float xThrust;
float yThrust;
static FishPlayer* getInstance();
protected:
private:
FishPlayer();
~FishPlayer();
static FishPlayer* instance;
};
#endif
Run Code Online (Sandbox Code Playgroud)
这是我的.cpp:
#include "..\include\FishPlayer.h"
FishPlayer* FishPlayer::instance=0; // <== I Get The Error Here
FishPlayer::FishPlayer()
{
//ctor
xThrust = 15.0f;
yThrust = 6.0f;
}
FishPlayer::~FishPlayer()
{
//dtor
}
FishPlayer* FishPlayer::getInstance() { // <== I Get The Error Here
if(!instance) {
instance = new FishPlayer();
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我一直在寻找一段时间,它一定是那么大我看不到的东西.
这是继承:
#ifndef …Run Code Online (Sandbox Code Playgroud)