我正在考虑使用Singelton设计模式并创建我的Main类的Singelton。在搜索时,我发现一些评论认为这是一种非常糟糕的编程习惯,特别是因为静态方法的声明并不能使面向对象的编程公道。您对我的代码有什么建议吗?

public class MainClass {
private static MainClass instance = new MainClass();

public static MainClass getMainInstance() {
    return instance;
}

public static void main(String[] args) {
    MainClass main = Main.instance;
}
}

最佳答案

尽管使用设计模式通常有助于进行干净的编程,但在不必要的情况下过度使用它们会导致代码过于复杂。

如果要创建应用程序的单例,则最好声明一个类,或者最好是一个包含将由主函数运行的应用程序的枚举。

使用枚举:

public enum Application{
    instance;

    public void run(){
    //do awesome stuff
    }
}


这样的结果是,即使通过序列化,应用程序也不能被复制,而且您不能使用接口来泛化您的应用程序。

当使用普通的类来实现singelton时,您需要使构造函数私有化或保护该类,以免再次被实例化。

使用带有私有构造函数的普通类:

public class Application{
    private static final Application instance = new Application();

    private Application(){}

    public Application getApplication(){
        return instance;
    }

    public void run(){
    //do awesome stuff
    }
}


该变体的优点是该类仍可以实现接口或扩展类,例如。可运行
缺点是通过使用序列化,该类仍可以多次实例化。

关于java - 在Java中创建主类的静态singelton是不好的编程习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61307490/

10-11 07:15