浅谈设计模式——单例模式

在实际的生活中,我们往往需要一个类只产生一种对象的情况。比如我的Windows系统的打印服务,同一时间智能为一台打印机提供服务;网站的访问统计器也是,一个网站只有一个访问统计器。也就是说,某些类在运行时智能创建一个对象,这就是我们所要讲的“单例模式”。

定义:单例模式就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例。

原理:单例模式可以分为饿汉式单例模式和懒汉式单例模式,饿汉式单例模式在类初始化的时候就已经创建了自身的对象,而懒汉式单例模式则是在要使用的时候才创建自身的对象。

实际代码如下:

 

//饿汉式单例模式
public class Singleton1 {
	protected Singleton1() { }
	public static Singleton1 getInstance(){
		return instance;		
	}
	private static Singleton1 instance = new Singleton1();
}


//懒汉式单例模式
public class Singleton2 {
	protected Singleton2(){}
	public static Singleton2 getInstance(){
		if(instance == null){
			instance = new Singleton2();	
		}
		return instance;
	}
	private static Singleton2 instance = null;
}


实际上通过上面的代码我们可以发现,单例模式的做法主要就是将类的构造函数不能是外部调用,这样也就保证了外部无法创建这个类的对象,从而只能使用该类的静态函数来创建对象。从而实现了单例模式。

使用时机:当系统要求一个类只有一个实例时,就需要使用单例设计模式。

优点:在单例模式中,客户调用类的实例时,只能调用一个公共的接口,这就为整个开发团队提供了一个共享的概念。

缺点:实现单例模式的类在实例化后,不能被别的类继承;在分布式系统中,当系统中的单例类被复制运行在多个虚拟机下时,在每一个虚拟机下都会创建一个实例对象,此时如果想知道具体哪个虚拟机下运行着哪个单例对象是很困难的,而且单例类很难实现序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值