设计模式:单例模式懒汉式与饿汉式的区别

  在单例模式中,一个类只允许有一个实例对象。之前的理解是用户自觉遵守一个类只创建一个实例对象的规则,其实这是错误的,单例模式中,会给类做一些特殊处理,使得用户只能得到一个该类的实例对象。用户是无法获取第二个实例对象的。

其中又有懒汉式和饿汉式,下面简单说一下两种方式的区别。

  懒汉式:

  (1):将类的构造器声明为私有化,这就使得外部无法通过构造函数创建这个类的对象了。那么如何创建这个类的唯一那个对象呢?

  (2):在该类中声明一个静态的私有的该类的变量。不初始化,或初始化为null,这是懒汉式的特点。

  (3):为该类创建一个对外公共的静态的方法访问该变量,如果该变量为null,创建它。

public class Test
{
  private static Test t = null;     //初始化为Null
  
  private Test() //将构造器声明为private很关键
  {
  }
  public static Test getTest()
  {
    if(null = t){           //对象为null,则创建一个
	  t = new Test();
	}
	return t;      //返回创建好的唯一该类对象
  }
}

饿汉式:

  

(1):将类的构造器声明为私有化,这就使得外部无法通过构造函数创建这个类的对象了。

  (2):在该类中声明一个静态的私有的该类的变量。并初始化它,这是饿汉式的特点。

  (3):为该类创建一个对外公共的静态的方法访问该变量。

public class Test
{
  private static Test t = new Test();  //在声明的同时初始化,创建一个实例
  
  private Test() //将构造器声明为private很关键
  {
  }
  public static Test getTest()
  {
	return t;      //返回创建好的唯一该类对象
  }
}

  这种创建方法并不是最佳的,因为有时就算不需要用到t对象,而需要用到Test类其他方法时t对象也会创建出来,这是因为成员变量在类加载时一定会被初始化。

  最佳方法是:将这个成员的声明放到内部类中去:

public class Test
{
  private static class createTest
  {
    private static Test t = new Test();
  }
  
  private Test() //将构造器声明为private很关键
  {
  }
  public static Test getTest()
  {
	return createTest.t;      //返回创建好的唯一该类对象
  }
}

  由于类只有在使用到的时候才加载,这样只有真正需要这个Test对象t时,调用getTest方法,这个内部类才被加载,t才被创建。而用到Test类其他方法时,这个内部类并不会被加载,t对象也就没有被创建。这样减少无用对象的产生。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值