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);
    	}
    }
    
  • 相关阅读:
    JavaScript技巧大全
    rs.open sql,conn 与conn.execute(sql)的区别
    ASP.NET中常用的优化性能的方法(1)
    JavaScript实现图片的不间断连续滚动
    Windows下安装和配置netbeans以使用C/C++全过程
    hdu Hat's Fibonacci
    hdu Big Number
    hdu Buy the Ticket
    acm steps chapter3总结
    如何从U盘引导安装win7/xp
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8067096.html
Copyright © 2011-2022 走看看