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



我学习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;
    }
}

所以我称其为:

SomeItf  launch = LaunchHandler.create(params);

[选项2]

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

我称其为:

SomeItf  launch = new LaunchHandler(params);

对我来说,这两个选项都相同,但是我在大项目中看到的第一个选项。

第一个选项的优势是什么?

有人可以散布光吗?

正如Sotirios Delimanolis在评论中所写的那样,第一个是静态工厂模式。使用此模式,由于无法访问构造函数,因此无法扩展类。

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

一个私人用例是著名的单例图案。另一个是对象池。

最新更新