单例模式

一、单例模式

   首先,什么是单例模式?

单例模式的定义是:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。


特征:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
二、单例模式有何用?如何实现?
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对
象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以
有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到
打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避
免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致
状态,避免政出多头。
•要想控制一个类只被创建一个实例,那么首要的问题就是要把创建实例的权限收回来,
让类自身来负责自己类实例的创建工作,然后由这个类来提供外部可以访问这个类实
例的方法,这就是单例模式的实现方式。
三、两种方法
1.懒汉式
所谓懒汉式,既然是懒,那么在创建对象实例的时候就不着急,会一直等到马上要使
用对象实例的时候才会创建,因此在装载对象的时候不创建对象实例,写法如下:
private static Singleton uniqueInstance = null;
而是等到第一次使用的时候,才去创建实例,也就是在getInstance方法里面去判断和创建。

2.饿汉式
所谓饿汉式,既然饿,那么在创建对象实例的时候就比较着急,饿了嘛,于是就在装载类的
时候就创建对象实例,写法如下:
privatestatic Singleton uniqueInstance = new Singleton();

四、具体创建
1.懒汉式
•1)私有化构造方法
•private Singleton(){ }
•2)提供获取实例的方法并将它变成静态的
•public static Singleton getInstance(){ }
•3)定义存储实例的属性并定义成静态的
•private static Singleton instance = null;
•4)实现控制实例的创建

代码
•public static Singleton getInstance(){
•    //先判断instance是否有值
•    if(instance == null){
•        //如果没有值,说明还没有创建过实例,那就创建一个
•        //并把这个实例设置给instance
•       instance = new Singleton ();
•    }     //如果有值,或者是创建了值,那就直接使用
•    return instance;
•} 
•public class Singleton {
•    //4:定义一个变量来存储创建好的类实例
•    //5:因为这个变量要在静态方法中使用,所以需要加上static修饰
•    private static Singleton instance = null;
•    //1:私有化构造方法,便于在内部控制创建实例的数目
•    private Singleton(){   
•    }
•    //2:定义一个方法来为客户端提供类实例
•    //3:这个方法需要定义成类方法,也就是要加static
•    public staticSingleton getInstance(){
•       //6:判断存储实例的变量是否有值
•       if(instance== null){
•           //6.1:如果没有,就创建一个类实例,并把值赋给存储类实                   
•                       例的变量
•           instance= new Singleton();
•       }
•       //6.2:如果有值,那就直接使用
•       returninstance;
•    }
•}
2.饿汉式

这种方案跟第一种方案相比,前面的私有化构造方法,提供静态的
getInstance方法来返回实例等步骤都一样。差别在如何实现
getInstance方法

•public class Singleton {
•//4:定义一个静态变量来存储创建好的类实例
•//直接在这里创建类实例,只会创建一次  

  private static Singleton instance = newSingleton();

•//1:私有化构造方法,便于在内部控制创建实例的数目

privateSingleton(){  }

•//2:定义一个方法来为客户端提供类实例
•//3:这个方法需要定义成类方法,也就是要加static
•//这个方法里面就不需要控制代码了

publicstatic Singleton getInstance(){

•//5:直接使用已经创建好的实例  

  return instance;

•    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值