Java笔记(十一)……单例设计模式
设计模式
解决某一类问题最行之有效的方法
Java中有23中设计模式
单例设计模式
解决一个类在内存中只存在一个对象
思路
- 将构造函数私有化
- 在类中创建一个本类对象
- 提供一个方法可以获取到对象
两种方法
饿汉式:类建立时分配对象
1: class Single
2: {
3: private Single(){}
4: //类建立时即初始化了对象
5: private static Single s = new Single();
6: public static Single getInstance()
7: {
8: return s;
9: }
10: }
懒汉式:调用时才分配对象,也叫做对象的延时加载
1: class Single
2: {
3: private Single(){}
4: private static Single s;
5: public static Single getInstance()
6: {
7: //调用时再分配对象
8: if(s == null)
9: s = new Single();
10: return s;
11: }
12: }
但是此懒汉式如果是多线程调用,容易出现new多个对象的问题,解决方法如下:
1: class Single
2: {
3: private Single(){}
4: private static Single s;
5: public static Single getInstance()
6: {
7: //调用时再分配对象
8: //为了避免每次都访问锁而设置的判断
9: if(s == null)
10: {
11: //加锁防止多线程调用时问题
12: synchronized(Single.class)
13: {
14: if(s == null)
15: {
16: s = new Single();
17: }
18: }
19: }
20: return s;
21: }
22: }
对比之下发现:
懒汉式代码较多,而且不安全,所以建议使用饿汉式。