首页 > 代码库 > 【JAVA单例模式详解】

【JAVA单例模式详解】

设计模式是一种思想,适合于任何一门面向对象的语言。共有23种设计模式。

单例设计模式所解决的问题就是:保证类的对象在内存中唯一。

举例:

A、B类都想要操作配置文件信息Config.java,所以在方法中都使用了Config con=new Config();但是这是两个不同的对象。对两者的操作互不影响,不符合条件。

解决思路:

1.不允许其他程序使用new创建该类对象。(别人new不可控)
2.在该类中创建一个本类实例。
3.对外提供一个方法让其他程序可以获取该对象。

解决方法:单例模式。

步骤:
1.私有化该类的构造函数
2.通过new在本类中创建一个本类对象。
3.定义一个共有的方法将创建的对象返回。

雏形:

1 class Single 2 {3     private static Single s=new Single();4     private Single(){}5     public static Single getInstance()6     {7         return s;8     }9 }

为什么方法是静态的:不能new对象却想调用类中方法,方法必然是静态的,静态方法只能调用静态成员,所以对象也是静态的。

为什么对象的访问修饰符是private,不能是public 吗?不能,如果访问修饰符是Public,则Single.s也可以得到该类对象,这样就造成了不可控。

举例:

 3 public class Single  4 { 5     private String name; 6     public String getName() { 7         return name; 8     } 9     public void setName(String name) {10         this.name = name;11     }12     private static Single s=new Single();13     private Single(){}14     public static Single getInstance()15     {16         return s;17     }18 }
1 public class Main {2     public static void main(String args[])3     {4         Single s=Single.getInstance();5         s.setName("张三");6         System.out.println(s.getName());7     }8 }

最后结果为:张三

 

前面的是饿汉式单例模式,下面开始讲解懒汉式单例模式。

 1 class Single  2 { 3     private static Single s=null; 4     private Single(){} 5     public static Single getInstance() 6     { 7         if(s==null) 8             s=new Single(); 9         return s;10     }11 }

我们可以看到和懒汉式和饿汉式相比唯一的区别就是懒汉式延迟创建了对象。

懒汉式的好处是显而易见的,它尽最大可能节省了内存空间。

但是懒汉式又有着弊端,在多线程编程中,使用懒汉式可能会造成类的对象在内存中不唯一,虽然通过修改代码可以改正这些问题,但是效率却又降低了。而且如果想要使用该类对象,就必须创建对象,所以虽然貌似使用懒汉式有好处,但是在实际开发中使用的并不多。

总结:

懒汉式在面试的时候经常会被提到,因为知识点比较多,而且还可以和多线程结合起来综合考量。

饿汉式在实际开发中使用的比较多。

 

【JAVA单例模式详解】