zoukankan      html  css  js  c++  java
  • 单例类:

    1、什么是单例类:只允许创建一个对象实例的类,称为单例类

    2、为什么要出现单例类:

      2.1、频繁的创建对象、回收对象造成系统的开销问题(比如:多次的创建数据库连接对象:conn 用来打开关闭数据库,造成服务器开销大,可以改成创建一个数据库连接对象conn,直到不再需要操作数据库再把这个对象conn回收)

      2.1、多次的创建对象对业务逻辑没有什么意义

    3、把一个类定义为单例类注意原则:

      3.1、把该类的构造器用private修饰符定义,把构造器隐藏起来,不让直接通过new该类的构造器来创建该类对象实例

      3.1、根据良好封装的原则,一旦把该类的构造器封装起来,就需要创建一个public方法作为访问该类的入口,且该方法必须用static修饰符,因为该类构造器隐藏,调用该方法的时候不存在类的实例对象,只能用类来访问

      3.3、该类必须能缓存已创建的对象,否则该类无法知道是否曾经创建过对象,也就无法保证只创建一个对象

      3.4、因此需要创建一个成员变量来保存曾经创建的类对象,而且该成员变量还必须能被上面的静态方法访问,因此必须用static修饰符修饰

    鉴于上面条件,创建一个单例类示例:

    class Singleton{
    	
    	//-使用一个类变量缓存曾经创建的类实例对象
    	private static Singleton instance;
    
    	//-对构造器用private修饰,隐藏起来,禁止直接new该类的构造器
    	private Singleton(){
    		
    	}
    	
    	//-提供一个public修饰的静态方法,作为该类的入口
    	//-作用是保证只产生一个类对象实例,并返回
    	public static Singleton getInstance(){
    		if(instance==null){
    			instance=new Singleton();
    		}
    		return instance;
    	}
    }
    
    public class SingletonTest{
    	public static void main(String[] args){
    		//-直接通过类访问其静态方法,获取其类的实例
    		Singleton s1=Singleton.getInstance();
    		
    		//-再次通过类访问其静态方法,但获取的仍然是上次创建的类对象实例
    		Singleton s2=Singleton.getInstance();
    
    		//-因为获取到的是同一个类实例对象,所以 == 判断是相等的,返回true
    		System.out.println(s1==s2);
    	}
    }
    
  • 相关阅读:
    docker 5种网络管理
    HYPER-V平台 批处理批量创建并配置ADSL帐号到CENTOS模板机中
    hyper-v透传trunk到虚拟机中
    CENTOS APACHE HTTPD 开启HTTPS
    chroot系统中,启动sshd -d 后,不能正常登录报错Ssh, error: openpty: No such file or directory
    CENTOS7配多IP出口socks5和http代理
    ROS配合CENTOS将pptp转成socks5使用
    中国省份信息与编码和世界所有国家信息与编码
    8.scrapy配置文件
    7.scrapy中间件
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8067096.html
Copyright © 2011-2022 走看看