有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是创建类的新对象还是使用静态方法?

我有一个简单的程序,由三个类组成。GUI、驱动程序和主程序

主要类别:

public static void main(String[] args){
GUI theGUI = new GUI();
}

GUI类:

public void makeGUI(){
final GUI guiInstance = new GUI();
//some other code here
}

我可以不创建两个对象,而是将makeGUI()方法设为静态,这样就可以避免创建一个不必要的对象吗?我知道对于这样规模的程序来说,性能并不重要,但是尝试避免不必要的对象是一种良好的编程实践吗


共 (2) 个答案

  1. # 1 楼答案

    有趣的是,这个小问题实际上有很多大的解决方案,这取决于上下文。应用程序越大,问题就越严重。尤其是当您进入单元测试和交换实现时。基本上,您的代码不会有太多的new调用

    按照增加复杂性的顺序,这可以通过以下方法解决

    1)工厂方法example

    2)建筑商example

    3)单身example

    4)依赖注入或控制反转example

    5)服务定位器example

    6)网络服务。既然可以使用服务,为什么还要创建一个新对象呢example

  2. # 2 楼答案

    这里有两种主要的模式可以帮助你。第一个是singleton,对于你正在做的事情来说可能是最直接的。其思想是,每个对象只创建一次,然后使用静态方法获取对象。在您的示例中,GUI类可能如下所示:

    public class GUI{
        private static final GUI instance = new GUI();
    
        //Make constructor private so that no one can create an instance
        private GUI(){}
    
        public GUI getInstance(){
            return instance();
        }
    
        ... other code
    }
    

    还有其他方法可以创建单例,但这可能是最简单的

    另一种模式称为factory模式。这与singleton类似,但可以让您更好地控制实例的数量和创建实例的方式。对于你正在做的事情来说,这可能是矫枉过正

    当你真的想让实例保持低调,并拥有更大的灵活性时,你需要开始研究Dependency injection和spring等框架