设计模式---单例模式

        单例模式是比较重要的一种模式,其主要作用是系统中仅存在一个类的唯一实例。维基百科上面的说明比较不错:

       單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的必須保證只有一個實例存在。許多時候整個系統只需要擁有一個的全局對象,這樣有利於我們協調系統整體的行為。比如在某個伺服器程序中,該伺服器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,然後服務進程中的其他對象再通過這個單例對象獲取這些配置信息。這種方式簡化了在複雜環境下的配置管理。

         还有一点也需要使用单例模式,就是针对系统比较重要的资源,比如数据库连接,网络IO连接等等。

         原理:使用私有的构造函数,在该类的接口中构造一个对象。其他程序使用时,通过接口调用来获取单一类的实例即可。以下是实现方式:

1 基本实现:该实现在单线程环境中是可以使用的,但是到了多线程环境,其实很难保证该实例的单一。

          

package com.dev.design.singleton;

public class Service {
	
	private Service(){}
	
	private static Service service = null;
	
	public static Service getServiceInstance(){
		return service == null?new Service():service;
	}
	
}
         2 多线程环境实现:使用这种方式,在多线程环境中也可以保证实例的单一,但是只要使用这种方式,就会有同步,这样的话,在性能方面会有优化空间。

package com.dev.design.singleton;

public class Service2 {
	private Service2(){}
	
	private static Service2 service = null;
	
	public static Service2 getServiceInstance(){
		synchronized(service){
			return service == null ? new Service2():service;
		}
	}
}
         3 Double-Checked Locking :双重检查机制,这种实现方式就是目前最普遍的实现方式了。

package com.dev.design.singleton;

public class Service3 {
	private Service3(){}
	
	private static Service3 service = null;
	
	public static Service3 getServiceInstance(){
		if(service == null){
			synchronized(service){
				if(service == null){
					service = new Service3();
				}
			}
		}
		return service;
	}
}

         目前先记录到这里,单例模式很值得研究,基本上每个系统都会使用到单例模式,还有该模式的性能研究,使用的研究等。

         说一下,为什么是需要静态变量来持有单例呢?

         我的理解:如果使用非静态的变量来持有,这样的话,很可能会被java语言的垃圾收集器收集了,等到下一次使用的时候,又要重新构造了。这样性能消耗太大,我想正是因为这个原因,才会考虑使用静态变量了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值