首页 > 解决方案 > 在 Java 中创建主类的静态单例是不好的编程习惯吗?

问题描述

我正在考虑使用 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;
}
}

标签: javastaticmainclass

解决方案


虽然使用设计模式通常有助于清理编程,但在不必要的情况下过度使用它们会导致代码过于复杂。

如果您想创建应用程序的单例,则声明一个类或更好的枚举包含将由您的主函数运行的应用程序会更有益。

使用枚举:

public enum Application{
    instance;

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

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

使用普通类来实现单例时,您需要将构造函数设为私有或保护该类,否则不会再次实例化。

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

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

    private Application(){}

    public Application getApplication(){
        return instance;
    }

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

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


推荐阅读