最近我接受了一次采访,他问我有关Singleton Design Patterns如何实现的问题,我告诉他,使用静态变量和静态方法,我们可以实现Singleton Design Patterns。

他似乎对答案感到满意,但我想知道

  • 我们可以有多少种不同的方式
    实现单例设计模式
    在Java中?
  • Singleton Object的范围是什么,它在JVM中如何实际运行?我知道我们将永远只有一个Singleton Object实例,但是该对象的实际范围是什么,是在JVM中还是在运行多个应用程序,而不是在JVM中根据上下文确定其范围,我真的很困惑无法给出令人满意的解释?
  • 最后,他问是否可以将Singleton Object与Clusters一起使用来进行解释,并且当我们调用Bean Factory获取对象时,是否有任何方法可以使Spring不实现Singleton Design Pattern?

  • 有关Singleton的任何投入都会受到高度赞赏,在处理Singleton时要记住的主要事项是什么?

    谢谢。

    最佳答案

    有几种方法可以在Java中实现Singleton模式:

    // private constructor, public static instance
    // usage: Blah.INSTANCE.someMethod();
    public class Blah {
        public static final Blah INSTANCE = new Blah();
        private Blah() {
        }
        // public methods
    }
    
    // private constructor, public instance method
    // usage: Woo.getInstance().someMethod();
    public class Woo {
        private static final Woo INSTANCE = new Woo();
        private Woo() {
        }
        public static Woo getInstance() {
            return INSTANCE;
        }
        // public methods
    }
    
    // Java5+ single element enumeration (preferred approach)
    // usage: Zing.INSTANCE.someMethod();
    public enum Zing {
        INSTANCE;
        // public methods
    }
    

    给定以上示例,每个类加载器将只有一个实例。

    关于在集群中使用单例...我不确定“使用”的定义是什么...面试官是否暗示在整个集群中创建了一个实例?我不确定这是否有意义...?

    最后,只需通过属性singleton =“false”即可在spring中定义一个非单一对象。

    关于java - Java Singleton设计模式: Questions,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3428615/

    10-09 15:21
    查看更多