我遇到了各种不允许直接创建它们的实例的类。相反,我们必须从其他类的静态方法或它自己的静态方法创建它们的实例。例如:
B b = A.getB();
或者
B b = B.getInstance();
这背后的原因是什么?
他们为什么不允许直接创建实例,如:
B b = new B();
我遇到了各种不允许直接创建它们的实例的类。相反,我们必须从其他类的静态方法或它自己的静态方法创建它们的实例。例如:
B b = A.getB();
或者
B b = B.getInstance();
这背后的原因是什么?
他们为什么不允许直接创建实例,如:
B b = new B();
一些类想要控制它们被实例化的方式,从而保护它们的构造函数不被公共使用。使用静态工厂方法,例如getInstance
允许他们将控制保留在自己的代码中。
想要这样做的原因有一百万个。
编辑:为了解决您的评论,这不能在构造函数中完成,因为new
运算符将始终创建一个新实例(除非引发异常)。当构造函数被调用时,构造函数中的代码来控制对象是否被实例化已经太晚了。
这些是Singleton Pattern的一个例子。它们通常具有私有构造方法,但在我链接的示例中,它们使用受保护来防止实例化。
抽象类也不能被实例化。
一些用例: