标签: singleton

在构造函数中初始化静态变量

看下面的代码:

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的输出不同?

java singleton

0
推荐指数
1
解决办法
1096
查看次数

Singleton什么时候不能作为Singleton工作?

可能重复:
用其他方式破解单例

任何人都可以告诉我什么时候Singleton不能作为一个Singleton

java singleton

0
推荐指数
1
解决办法
7123
查看次数

在Spring中实现一个单例bean

我正在尝试使用Spring为我的网站创建一个缓存类,并将以下代码添加到我的applicationContect.xml文件中:

<bean id="SiteCache" class="Cache.SiteCache">
Run Code Online (Sandbox Code Playgroud)

我不确定的是如何初始化这个类.我是否需要自己初始化它,或者当网站加载时Spring会处理它吗?如果是这样,我将如何接受构造函数中的参数?

我希望这个类大部分时间都可以使用,作为访问变量来填充站点的一种更快的方法,但我需要一种方法来检查是否有一个实例,以便我可以加载XML文件来自其他来源.

在春天实现缓存的最佳方法是什么?

非常感谢,

singleton spring spring-mvc

0
推荐指数
1
解决办法
1089
查看次数

Singleton的2个实现

我知道在java中实现单例模式的两种方法,我想知道哪一个更好,为什么.

第一种方式是:

  1. 声明类private的构造函数
  2. 将类中的所有内容都静态化 - 基本上类实例本身就是单例

第二种方式是:

  1. 声明类private的构造函数
  2. 有一个静态成员来保存单例(可能是该类的一个实例)
  3. 有一个静态的getInstance()方法

我倾向于认为即使第二种方法是最常见的,第一种方法可能会产生更好的代码可读性,这两种方法在运行时复杂性上看起来同样有效,所以我真的没有理由为什么第二种方法更常见,认为更好的做法......

开导我!

java singleton static design-patterns

0
推荐指数
1
解决办法
213
查看次数

单身是否适合这种设计?

我的模型已经实现,我正在研究一个视图.

我有一个名为Helper的类,它是我的控制器的一部分.Helper类的目的是包含模型的"主副本".其他类将调用Helper方法来请求他们自己的模型副本(整个或特定部分).Helper也是唯一允许对模型进行更改的类.

我正在处理的视图包含一个名为DrawingPanel的JPanel.DrawPanel的paint()方法被覆盖,以便在绘制自己之前从Helper检索模型.

将Helper类实现为单例是实现此目标的最佳方法,还是有更好/更简单/更优雅的方式来实现我的目标?

我想我也应该提前知道我的Helper作为单例的实现是否需要线程安全.gui是在Swing中设计的.

java singleton design-patterns

0
推荐指数
1
解决办法
164
查看次数

单例方法线程安全

我有一个问题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)

(对不起,我不能提供真实的例子.)接下来的问题是:方法操作()线程是否安全?

java singleton multithreading design-patterns

0
推荐指数
1
解决办法
1924
查看次数

C# - Singleton - 我需要一个构造函数吗?

可能重复:
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)

c# singleton design-patterns

0
推荐指数
1
解决办法
426
查看次数

用于深层继承的C++模板单例基类

所以我有一个简单的单例模板基类(为了问题目的缩小):

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'等.我希望他们不要实际共享相同的实例,但仍然只有每个经理一个实例......

c++ singleton templates

0
推荐指数
1
解决办法
2437
查看次数

防止单例类的子类调用单例的构造函数

好吧,我有一个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# singleton subclass

0
推荐指数
1
解决办法
253
查看次数

错误:'*'标记之前的预期构造函数,析构函数或类型转换

我有一个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)

c++ singleton

0
推荐指数
1
解决办法
1793
查看次数