Java设计模式(一):单例设计模式( Singleton)之饿汉式

什么是单例设计模式?
用大白话讲,就是在Java应用程序中,保证某个类在内存中只有一个实例对象存在。也就是某个类始终只能产生一个对象。

单例设计模式的设计思路:

1. 既然只能产生一个对象实例,也就是说该对象具有唯一性,那么如何能够做到这样呢? 首先就是不能让其它的程序通过new的形式在外部创建该类的实例对象。因为如果该类在外部 (就是在其它类中) 能够通过new关键字创建对象,那么就能够产生多个实例对象。既然是单例,这肯定是不允许的。

2. 既然在外部不能通过new关键字创建该类的实例,那么如何创建该类的实例呢? 很简单,就是在该类的内部创建该类的实例对象(不是在方法里面创建,而是作为静态成员,为什么需要是静态成员?下面再说)。

3. 在内部将实例对象创建好之后,然后提供一个方法供外部访问该实例对象即可。那么这个时候这个类就做到了始终只能产生一个实例对象。


下面讲解具体的实现步骤:
1.私有化该类的构造方法,这样是确保在其它类中不能通过new关键字创建该类的实例对象。

class Singleton{
	private Singleton(){}
}

2.在该类的内部创建一个类的实例对象,并且声明成静态成员
class Singleton{
	private static Singleton  instance = new Singleton(); 
	private Singleton(){}
}

3. 定义一个方法,将创建的对象返回,提供给外部访问
class Singleton{
	private static Singleton instance = new Singleton(); 
	private Singleton(){}
	public static Singleton getInstance(){
		return instance;
	}
}


问题:为什么要将成员变量定义成为静态的呢?
     这样理解:首先是该类的构造方法被私有化,所以在外部不能不能创建该类的实例对象,而在外部要想访问该类里面的方法,只能通过 类名.方法 的形 式进行访问,不能通过 对象.方法 的形式进行访问(因为不能创建对象嘛!),所以方法必须定义成为静态的, 而在静态方法中,是不能够访 问非静态的成员变量的,所以变量必须定义成为静态的,这是其一。 其次,就算没有前面说的那一条,该变量也需要定义成为静态的,因 为如果不是静态的,就会出现不断的创建对象的情况(就是当创建一个对象的时候,发现这个对象里面又在创建对象,如此反复),直到内 存溢出,而如果定义成为静态的,就没有这种情况发生,因为这时候该对象时随着类的加载而创建的,此后不会再进行创建。
基于以上两点,就该把成员变量定义成为静态的。


这就是单例设计模式中的饿汉式设计方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值