Java 类初始化的两种方式有什么区别?

Java 类初始化的两种方式有什么区别?,java,Java,我学习Java,不知道下面的类初始化实现之间是否有任何区别 [选项1] public class LaunchHandler implements SomeItf{ public static LaunchHandler create(ArrayList<String> params){ LaunchHandler self = new LaunchHandler(params); return self; } private

我学习Java,不知道下面的类初始化实现之间是否有任何区别

[选项1]

public class LaunchHandler implements SomeItf{

   public static LaunchHandler create(ArrayList<String> params){
        LaunchHandler self = new LaunchHandler(params);
        return self;
    }

   private LaunchHandler(ArrayList<String> params){
        mParams = params;
    }
}
public class LaunchHandler implements SomeItf{ 

   public LaunchHandler(ArrayList<String> params){
        mParams = params;
    }
}
[选项2]

public class LaunchHandler implements SomeItf{

   public static LaunchHandler create(ArrayList<String> params){
        LaunchHandler self = new LaunchHandler(params);
        return self;
    }

   private LaunchHandler(ArrayList<String> params){
        mParams = params;
    }
}
public class LaunchHandler implements SomeItf{ 

   public LaunchHandler(ArrayList<String> params){
        mParams = params;
    }
}
对我来说,两个选项都是一样的,但第一个选项是我在大项目中看到的

第一种选择的优点是什么


有人能传播光吗?

正如索蒂里奥斯·德里马诺利斯在评论中所写,第一个是静态工厂模式。使用此模式无法扩展类,因为无法访问构造函数

此外,静态工厂模式可以以其他方式使用,例如,控制创建的实例数量,或者返回不同类的实例(通常应用相同的接口)

一个私有用例是著名的单例模式。
另一个是对象池。

您必须为所有内容提供工厂方法。其他重复项:据我所知,最佳实践是使用工厂模式,因为它给了我额外的选项,对吗?@snaggs是的,它鼓励根据接口而不是特定类进行编码(更好的抽象),这为您的实现和修改提供了更好的灵活性,您可能希望在此过程中应用这些灵活性。这本书鼓励使用静态工厂,这本书强烈推荐给任何Java程序员!如果需要接口,则为是。否则不会。仅仅为了创建接口而创建接口就是噪音。看看这个:@davidxxx这是一个意见问题。请务必阅读接受答案的最后一句话(括号内)——在你发布的链接中。事实上,我给出了我的意见:)我读了。事实上,它是如何写的还不是很清楚。我更强调作者提到的XP实践:YAGNI(你不需要它):不要添加不需要的东西。接口的定义可能有多种原因。如果你没有任何具体的理由使用它,但你使用它,你添加一些不需要的东西。这属于雅格尼。