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