JAVA设计模式-单例模式

来源:互联网 发布:java订阅发布模式 编辑:程序博客网 时间:2024/05/19 09:40

一、单例模式简介

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

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

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

二、单例模式实现方式

               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、单例模式可以用到某些具体的场合,如全局发送消息等场合。


 

       



0 0
原创粉丝点击