• 单例模式


    是什么?

           单例,"单"就是一个,"例"就是实例,”单例“就是说”一个类只有一个实例,且自行实例化向整个系统提供“。


    为什么? 

           为什么要使用单例模式呢?换句话说,为什么一定要确保一个类只有一个实例呢?通过下面这个例子来看:

           QQ,当你想和某个朋友聊天时,在好友列表中找到该好友,鼠标双击,就会打开对话窗口(从程序角度说:捕捉到你双击事件时会实例化出一个窗口对象)。当窗口打开后,你再去双击该好友时,观察是否还会再打开一个新的窗口,答案是否定的。在这种情况下,只能允许实例化一个同一窗口的对象。【QQ实际上可能不是这样实现的,我只是想举这么一个例子】同样机理的还有打印机,同一时刻只能执行一个打印任务,等等。


    怎么样?

         这么样实现呢?其实单例实现有很多方法,下面只给出比较高效的一种:

        

    package test;
    /**
     * 单例模式.
     * @author nagsh
     *
     */
    public class Singleton {
    	//将该类的实例(即对象)声明为静态的
        public static Singleton singleton = null;
        //空构造方法--私有
    	private Singleton() {
    	}
        //对象生成器
        public void getInstance(){
        	//如果对象为null,进行实例化
        	if(singleton == null){
        		//锁机制,当有多个线程同时访问时,必须等前一个线程释放锁后才可以执行
        		 synchronized(Singleton.class){
        			 //需再判断一次--如果上一个线程已经实例化了,就没必要再实例化了
                     if(singleton==null){
                    	 singleton=new Singleton();
                     }
                 }
        	}
        }
    }
    
    当外部类需要该类对象的时候不是实例化,而是通过调用getInstance()方法获取实例,而原本默认public的构造方法由于被覆盖成了private的,所以外部类其实也无法调用它的构造方法去实例化。



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    SQL Server 各版本安装包分享
    你真的了解数据库工程师吗?写给想从事数据库方面工作的朋友
    SQL Server中CASE WHEN的用法
    SQL Server存储过程用法介绍
    python---re模块
    python----openpyxl模块
    selenium(一)---selenium基础
    数据库---MySQL(三)
    数据库---MySql(二)-pymysql
    数据库---MySQL(一)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931744.html
Copyright © 2020-2023  润新知