JAVA设计模式-单例模式

一、单例模式简介

           单例模式,是一种软件设计中常用的一种设计模式,主要是用来控制系统中的某一个具体类只有有一个实例存在。

           有时候我们需要确保整个系统中的某个类只有一个实例存在,这样便于我们协调系统中的行为。例如,我们要在某个系统中使用发送短信的服务,那么、

            我们希望单一的短信发送类实例,而不是由多个对象来共同实现短信的发送服务,这时候我们可以通过单例模式来实现。

二、单例模式实现方式

               1、内部实现-内部空间就是类的内部初始化单例对象的实例,如果是第一次访问则创建,反之则不创建,直接拿来用就好了,目前使用的单例模式都是通过内部实现的。

      

/**
 * 单例模式内部实现方式
 * @author 张天柱
 * @version 1.1
 **/
public class Instance1 {
	/*声明一个内部私有化对象*/
	private static Instance1 instance1 = null;
	
	/*私有构造方法,防止被实例化*/
	private Instance1(){
		
	}
	/*静态工程方法,创建实例*/
	public static Instance1 getInstance1(){
		if(instance1 == null){
			instance1 = new  Instance1();
		}
		return instance1;
	}
	
	/*如果该对象被序列化,该方法可以保证对象在序列化前后保持一致*/
	public Object readResolve(){
		return instance1;
	}
	
}

         这个类基本上可以满足要求,但是在毫无线程安全的情况下,把它放入到多线程的环境中,肯定会出错,如何解决,我们首先会想到在getInstance1()方法加入关键字synchronized,但是这种方法在每次获取对象时,都会讲该方法锁住,在性能上会有所降低。所以我们可以判断如果对象为空,我们再将该方法锁定,这样会在很大程度上提高性能..
/*静态工程方法,创建实例*/
	public static Instance1 getInstance1(){
		if(instance1 == null){
			synchronized (instance1) {
				instance1 = new  Instance1();
			}
		}
		return instance1;
	}

     通过对单例模式的学习告诉我们:

       1、单例模式虽然理解起来很简单,但是在实施起来还是有一定的难度的

       2、synchronized关键字一定要慎用

       3、单例模式可以用到某些具体的场合,如全局发送消息等场合。


 

       



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值