单例模式

一些人总结出来的用于解决特定问题的固定的解决方案。

解决一个类在内存中只存在一个对象的目的,保证对象的唯一性

1、为了避免其他程序建立过多的该类对象,禁止其他程序建立该类对象

2.为了其他方便其他程序的访问,在本类中自定义一个对象

3.为方便其他程序对自定义类对象的访问,对外提供一些访问方式.

创建方法:

1.将构造函数私有化。这样别人就不能创建该类的对象。

2.在类中创建一个私有的本类对象。

3、提供一个用类名调用的共有的方法来获取唯一的私有对象。

 1 class Single
 2     {
 3         private static Single s = new Single();//恶汉式
 4         private Single()
 5         {
 6         }
 7         public static Single getSingle()
 8         {
 9             return s;
10         }
11 
12     }    
13     class Single
14     {
15         private static Single s = null;//懒汉式
16         private Single()
17         {
18         }
19         public static Single getSingle()
20         {
21             if(s == null)
22                 s = new SIngle();
23             return s
24         }
25 
26     }

懒汉模式public static Single s; 这样做的意思是,你的这个单例类别人不一定使用,所以没必要提前定义,可能你定义了别人用不到,懒汉之处,在于什么时候使用,是么时候在创建这个对象。

推荐使用恶汉单例模式。懒汉单例模式,可能会出现线程方面的问题。

懒汉模式的单例模式的线程安全问题,之前介绍过单例模式的两种类型,恶汉模式和懒汉模式,当时就有提到懒汉模式的单例模式存在线程安全问题。下面是一种,既考虑线程安全问题又考虑效率问题的解决方案.

 1 Class Single
 2 {
 3 Private Single s;
 4 Private Single(){}
 5 Public Single getSingle()
 6 {
 7 If(s == null)
 8 {
 9 Synchronized(“锁”)
10 {
11 If(s == null)
12 {
13 S = new Single();
14 }
15 }
16 }
17 Return s;
18 }
19 }

其实,上面加完锁之后就可以保证线程安全了,但是为了提高效率,在外面又加了一层判断,这个可以分析一下,第一次的效率慢一点,以后的效率还是很快的。

posted @ 2016-11-03 16:37  zhangoliver  阅读(224)  评论(0)    收藏  举报