两种类初始化方法有什么区别?

时间:2016-12-15 18:03:35

标签: java

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

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

第一选项有什么优势?

有人可以传播光吗?

1 个答案:

答案 0 :(得分:2)

Sotirios Delimanolis在评论中写道,第一个是静态工厂模式。使用此模式,您的类无法扩展,因为无法访问构造函数。

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

一个私人用例是着名的Singleton模式。 另一个是对象池。