单例模式

单例模式是最简单,但也是比较常用的模式之一。

单例模式:确保一个类只有一个实例对象,并提供一个全局访问点。

有一些类的实例对象,我们只需要一个,比如说:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这些类的对象有且只能有一个实例对象,如果制造出多个实例对象,就会导致许多的

问题产生。例如:程序的行为异常,资源使用过量,或者是不一致的结果。

单例模式的核心思想就一条:将构造器私有化,通过类的静态方法返回唯一的类的实例对象。

立即加载实例的形式:

 1 /**
 2  * 单例模式的立即加载模式  
 3  * @author wly
 4  *
 5  */
 6 public class RightNowGetInstance {
 7    //只要这个类 被加载  就获得这个类的是一个实例对象
 8    private  static RightNowGetInstance  rn = new RightNowGetInstance();  
 9    //将构造器私有化   其他类不能通过 new来调用这个构造器
10    private  RightNowGetInstance()
11    {
12        
13    }
14    //通过静态方法 返回这个类的唯一的实例对象
15    public static RightNowGetInstance  getInstance()
16    {
17        return rn;
18    }
19 }

 延迟加载实例的形式:

 1 /**
 2  * 单例模式的 延迟加载模式
 3  * @author wly
 4  *
 5  */
 6 public class DelayGetInstance {
 7    //声明一个变量 用来引用 将要产生的唯一的实例对象
 8    private  static  DelayGetInstance  dgi;
 9    //将构造器私有化   其他类不能通过new来调用这个构造器 来产生实例对象
10    private  DelayGetInstance()
11    {
12        
13    }
14    //通过静态方法 返回这个类的唯一的实例对象   
15    //synchronized关键字  迫使每条线程进入这个方法之前必须等到别的线程离开该方法,也就是说不能有两条线程同时进入这个方法
16    public static synchronized DelayGetInstance  getInstance()
17    {
18        if(dgi == null)           //dgi为空  ,表示还没有一个实例对象    new一个实例对象返回
19        {                         //dgi不为空 ,表示前面已经创建了一个实例对象  ,直接返回前面创建的实例对象
20            dgi = new DelayGetInstance();
21        }
22        return dgi;
23    }
24 }

 

posted @ 2015-01-07 10:56  wangliyue  阅读(123)  评论(0编辑  收藏  举报