把类的构造函数私有化,可以阻止类的外部使用new关键字创建类的实例
但是该类自己可以创建他的实例并通过一个函数返回,这就是单例设计模式的原理
如下代码可以获得
- public class DemoA {
- public static void main(String[] args) {
- DemoB p = DemoB.getInstance();
- }
- }
- class DemoB{
- private DemoB(){}
- private static DemoB p = new DemoB();
-
- public static DemoB getInstance(){
- return p;
- }
- }
复制代码
如果把类写成抽象类,那么不管是类的外部,还是类本身都不能创建类的实例了
但是可以创建该类的匿名子类对象
代码如下
- public class DemoA {
- public static void main(String[] args) {
- DemoB p = DemoB.getInstance();
- }
- }
- abstract class DemoB{
- private DemoB(){} //该方法不可能被调用
- private static DemoB p = new DemoB(){
- //自定义代码
- };
-
- public static DemoB getInstance(){
- return p;
- }
- }
复制代码
注意p为DemoB的匿名子类实例
这就是两者的区别 |