单例模式(1)__基本定义以及实现

单例模式定义

单例模式(singleton)顾名思义,就是一个类只有一个实例。

作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的实现原理

1.一个类能够被创建多个实例,问题的根源在于类的构造方法是公开的,在类的外部可以通过构造方法创建多个实例。

2.要想控制一个类只被创建一个实例,那么首要的问题就是要把创建实例的权限收回来,让类自身来负责自己类实例的创建工作,然后由这个类来提供外部可以访问这个类实例的方法,这就是单例模式的实现方式。

具体实现方式

在Java中,单例模式的实现又分为两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。

懒汉式:

所谓懒汉式,既然是懒,那么在创建对象实例的时候就不着急,会一直等到马上要使用对象实例的时候才会创建,懒人嘛,总是推托不开的时候才去真正执行工作,因此在装载对象的时候不创建对象实例,到第一次使用的时候,才去创建实例。

写法如下:

privatestaticSingletonuniqueInstance=null;

示例代码如下:

public class Singleton {  
    /**  
     * 定义一个变量来存储创建好的类实例  
     */  
    private static Singleton uniqueInstance = null;  
    /**  
     * 私有化构造方法,可以在内部控制创建实例的数目  
     */  
    private Singleton(){  
        //  
    }  
    /**  
     * 定义一个方法来为客户端提供类实例  
     * @return 一个Singleton的实例  
     */  
    public static synchronized Singleton getInstance(){  
        //判断存储实例的变量是否有值  
        if(uniqueInstance == null){  
            //如果没有,就创建一个类实例,并把值赋值给存储类实例的变量  
            uniqueInstance = new Singleton();  
        }  
        //如果有值,那就直接使用  
        return uniqueInstance;  
    }  
 } 


饿汉式:

所谓饿汉式,既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是就在装载类的时候就创建对象实例,

写法如下:

privatestaticSingletonuniqueInstance=newSingleton();

示例代码如下:

public class Singleton {  
    /**  
     * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次  
     */  
    private static Singleton uniqueInstance = new Singleton();  
    /**  
     * 私有化构造方法,可以在内部控制创建实例的数目  
     */  
    private Singleton(){  
        //  
    }  
    /**  
     * 定义一个方法来为客户端提供类实例  
     * @return 一个Singleton的实例  
     */  
    public static Singleton getInstance(){  
        //直接使用已经创建好的实例  
        return uniqueInstance;  
    }  
 } 


参考文章:

1.http://book.51cto.com/art/201010/232011.htm

2.http://baike.baidu.com/view/1859857.htm


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值