草庐IT

Singleton

全部标签

Java:惰性初始化单例

创建单例的模式似乎是这样的:publicclassSingleton{privatestaticfinalSingletoninstance=newSingleton();privateSingleton(){}publicstaticSingletongetInstance(){returninstance;}}但是我的问题是,如果SingletonConstructor做了一些对单元测试不友好的事情,例如调用外部服务、jndi查找等。我想我可以像这样重构它:publicclassSingleton{privatestaticSingletoninstance;privateSing

java - 如何多次实例化一个单例?

我的代码中需要一个单例。我用Java实现了它并且运行良好。我这样做的原因是为了确保在多个环境中,只有一个此类的实例。但现在我想通过单元测试在本地测试我的Singleton对象。出于这个原因,我需要模拟这个Singleton的另一个实例(来自另一个设备的对象)。那么是否有可能出于测试目的再次实例化一个单例,还是我必须模拟它?我不确定,但我认为可以通过使用不同的类加载器实现吗? 最佳答案 传统上,单例创建自己的实例,并且只创建一次。在这种情况下,无法创建第二个实例。如果你使用依赖注入(inject),你可以让框架为你创建单例。单例不防范

java - Java中的单例和继承

我有一个基类,它捕获两个类共有的一些功能。换句话说,我可以创建一个基类并将这两个类作为该基类的子类。但是,对于这些子类中的每一个,可以创建的实例数为1(即每个子类都必须是单例)。我在谷歌上搜索了一下,发现对此有合理的争论。尽管有多种解决方案可用,但我不确定它们是否适合我的情况。谁能告诉我应该如何设计这个? 最佳答案 你可以让每个类单独成为一个单例,并让基类抽象。不确定争论的焦点是什么——总的来说,单例不是一个好主意吗? 关于java-Java中的单例和继承,我们在StackOverflo

Java :Questions on clone method

我在面试中被问到这些。Doweneedtotakecareofclonemethodinaconcurrentenvironment?Canwesynchronizetheclonemethod?Doesitmakeanysensetouseclonemethodinsingletonclasses?面试时我没有给出令人信服的答案。 最佳答案 可能99.99%的情况下是的,但您只需要像类的任何其他方法一样考虑克隆,并在必要时根据您的特定上下文同步它。同步一个在其Base类中未同步的方法并没有错。另一方面,在覆盖同步方法时不同步方法可

enums - Java 枚举单例的注解

正如Bloch在EffectiveJava2ndEdition的第3项(“使用私有(private)构造函数或枚举类型强制实现单例属性”)中所述,单元素枚举类型是最好的实现单例的方法。不幸的是,旧的私有(private)构造函数模式仍然非常普遍和根深蒂固,以至于许多开发人员在创建枚举单例时不明白我在做什么。在类声明上方的一个简单的//EnumSingleton注释会有所帮助,但它仍然留下了一个可能性,即另一个程序员稍后可能会出现并向枚举添加第二个常量,从而破坏单例属性.对于私有(private)构造函数方法所存在的所有问题,在我看来,它比枚举单例更能self记录。我想我需要的是一个注释

java - 多线程访问的单例类中的实例变量

我有一个单例类:publicclassSchool{privateHashMapstudents;privatestaticSchoolschool;privateSchool(){students=newHashMap();}publicstaticSchoolgetInstance(){if(school==null){school=newSchool();}returnschool;}//MethodtoaddstudentprotectedvoidaddStudent(Stringid,Stringname){students.put(id,name);}//Methodtor

具有继承性的 Java 单例

我有一组单例类,我想避免样板代码。这是我现在拥有的:publicclassMammal{protectedMammal(){}}publicclassCatextendsMammal{staticprotectedCatinstance=null;staticpublicCatgetInstance(){if(null==instance){instance=newCat();}returninstance;}privateCat(){//somethingcat-specific}}这行得通并且没有任何问题,除了我有许多必须复制getInstance()方法的Mammal子类。如果可

java - 双重检查锁定,NetBeans 让我感到困惑?

我有一个关于双重检查锁定的问题。考虑这个例子:publicclassSingleton{privatestaticvolatileSingletoninstance=null;publicstaticSingletongetInstance(){if(instance==null){synchronized(Singleton.class){if(instance==null){instance=newSingleton();}}}returninstance;}}据我了解,上面的代码是创建单例类的正确方法。但是,NetBeans希望我删除外部if语句,所以它看起来像这样:public

java - 枚举、单例和反序列化

枚举被认为是单例的最佳方式,原因之一是它隐式继承了Serializable。但是枚举如何防止单例的反序列化问题? 最佳答案 序列化机制在special,specificway中处理它们.但是传统的单例可以通过定义返回唯一实例的readResolve()方法很好地反序列化。参见http://www.oodesign.com/singleton-pattern.html举个例子。 关于java-枚举、单例和反序列化,我们在StackOverflow上找到一个类似的问题:

java - 自释放(引用计数)单例

考虑以下场景:您有一个代表某种数据提供者的单例类。这个单例类分配了大量内存,你希望它在没有人使用他时释放它分配的内存。流程:A类调用getInstance并使用单例(这是第一次调用getInstance,单例类分配了巨大的内存块)B类调用getInstance并使用单例A类和B类“消亡”(现在没有人使用单例)程序还在运行,但是单例的内存没有释放。您如何建议实现在第3阶段(A类和B类“死亡”)将释放内存的单例(我知道java使用垃圾收集但仍然可以说我想要以下内存=null)。附言我不想强制每个使用单例调用的类在它停止使用时在单例上释放它。我希望单例自己处理“释放”内存。