单例模式的作用:对共同的对象进行操作时,想要保证他的唯一性。
单例模式分为两种模式:饿汉模式和懒汉模式
1.饿汉模式(立即加载)
在创建类的同时实例化对象
2.懒汉模式(延迟加载)
在调用的时候实例化对象
代码:

package com.imooc;
/*
 * 单例模式Singleton
 * 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆
 * 作用:保证整个应用程序中某个实例有且只有一个
 * 类型:饿汉模式、懒汉模式
 */
public class Singleton {
	//1.将构造方法私有化,不允许外部直接创建对象
	private Singleton(){		
	}
    	
    	//2.创建类的唯一实例,使用private static修饰
    	private static Singleton instance=new Singleton();
    	
    	//3.提供一个用于获取实例的方法,使用public static修饰
    	public static Singleton getInstance(){
    		return instance;
    	}
    }

    package com.imooc;
    /*
     * 懒汉模式
     * 区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
     *      懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
     */
    public class Singleton2 {
    	//1.将构造方式私有化,不允许外边直接创建对象
    	private Singleton2(){
    	}
    	
    	//2.声明类的唯一实例,使用private static修饰
    	private static Singleton2 instance;
    	
    	//3.提供一个用于获取实例的方法,使用public static修饰
    	public static Singleton2 getInstance(){
    		if(instance==null){
    			instance=new Singleton2();
    		}
    		return instance;
    	}
    }

    package com.imooc;
    
    public class Test {
    	public static void main(String[] args) {
    		//饿汉模式
    		Singleton s1=Singleton.getInstance();
    		Singleton s2=Singleton.getInstance();
    		if(s1==s2){
    			System.out.println(\"s1和s2是同一个实例\");
    		}else{
    			System.out.println(\"s1和s2不是同一个实例\");
    		}
    		
    		//懒汉模式
    		Singleton2 s3=Singleton2.getInstance();
    		Singleton2 s4=Singleton2.getInstance();
    		if(s3==s4){
    			System.out.println(\"s3和s4是同一个实例\");
    		}else{
    			System.out.println(\"S3和s4不是同一个实例\");
    		}
    		
    	}
    }
收藏 打印