为什么有些类会限制直接实例化?

Yat*_*oel 2 java instantiation factory-pattern

我遇到过各种不允许直接创建实例的类.相反,我们必须从其他类的静态方法创建它们的实例,或者它拥有静态方法.例如:

B b = A.getB();
Run Code Online (Sandbox Code Playgroud)

要么

B b = B.getInstance();
Run Code Online (Sandbox Code Playgroud)

这背后是什么原因?

为什么他们不允许直接创建实例,如:

B b = new B();
Run Code Online (Sandbox Code Playgroud)

ska*_*man 7

有些类希望控制它们实例化的方式,从而保护它们的构造函数不被公共使用.使用静态工厂方法,getInstance允许它们将控件保留在自己的代码中.

有一百万个理由想要这样做.

编辑:要解决您的注释,这不能在构造函数内完成,因为new运算符将始终创建一个新实例(除非抛出异常).在调用构造函数时,构造函数中的代码控制是否实例化对象为时已晚.