单例模式(Singleton)-保证一个类仅有一个实例,并提供一个访问它的全局访问点。

来源:互联网 发布:justin和selena知乎 编辑:程序博客网 时间:2024/06/05 10:02

单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

 

(1)懒汉式实现示例代码如下:

/**
 * 懒汉式单例实现的示例
 */
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;
    }
    /**
     * 示意方法,单例可以有自己的操作
     */
    public void singletonOperation(){
        //功能处理
    }
    /**
     * 示意属性,单例可以有自己的属性
     */
    private String singletonData;
    /**
     * 示意方法,让外部通过这些方法来访问属性的值
     * @return 属性的值
     */
    public String getSingletonData(){
        return singletonData;
    }
}

(2)饿汉式实现,示例代码如下:

/**
 * 饿汉式单例实现的示例
 */
public class Singleton {
    /**
     * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次
     */
    private static Singleton uniqueInstance = new Singleton();
    /**
     * 私有化构造方法,可以在内部控制创建实例的数目
     */
    private Singleton(){
        //
    }
    /**
     * 定义一个方法来为客户端提供类实例
     * @return 一个Singleton的实例
     */
    public static Singleton getInstance(){
        //直接使用已经创建好的实例
        return uniqueInstance;
    }
   
    /**
     * 示意方法,单例可以有自己的操作
     */
    public void singletonOperation(){
        //功能处理
    }
    /**
     * 示意属性,单例可以有自己的属性
     */
    private String singletonData;
    /**
     * 示意方法,让外部通过这些方法来访问属性的值
     * @return 属性的值
     */
    public String getSingletonData(){
        return singletonData;
    }
}

关于饿汉式、懒汉式的名称说明:
饿汉式、懒汉式其实是一种比较形象的称谓。
    所谓饿汉式,既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是就在装载类的时候就创建对象实例,写法如下:
private static Singleton uniqueInstance = new Singleton();  
     所谓懒汉式,既然是懒,那么在创建对象实例的时候就不着急,会一直等到马上要使用对象实例的时候才会创建,懒人嘛,总是推托不开的时候才去真正执行工作,因此在装载对象的时候不创建对象实例,写法如下:
private static Singleton uniqueInstance = null;
而是等到第一次使用的时候,才去创建实例,也就是在getInstance方法里面去判断和创建

 

示例代码转自:http://student.csdn.net/space.php?uid=1294199&do=blog&id=48260

原创粉丝点击