饿汉模式 package model;/** * 单例模式 * @author cocoRen * 有些 *保证应用程序的对象只有一个 *类型:饿汉模式,懒汉模式 */public class Singleton {//1.创建类的唯一实例,修饰为private static/** * 加载
package model; /** * 单例模式 * @author cocoRen * 有些 *保证应用程序的对象只有一个 *类型:饿汉模式,懒汉模式 */ public class Singleton { //1.创建类的唯一实例,修饰为private static /** * 加载时间,因为修饰为static所以再类加载时就会实例化对象,此为饿汉模式 */ private static Singleton instance =new Singleton(); //2.将构造函数私有化,不允许外部直接创建对象 private Singleton(){ } //提供一个获取实例的方法 //类方法 public static Singleton getInstance(){ return instance; } }懒汉模式
package model; public class Singleton2 { //1.将构造函数私有化 private Singleton2(){ } //2.创建类的唯一实例 private static Singleton2 instance; //3.提供获取实例的方法 public static Singleton2 getInstence(){ //再返回实例时判断是否创建了实例,若没有,先创建实例再返回,此为懒汉模式 if(instance==null){ instance=new Singleton2(); } return instance; } }测试代码
package model; 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.getInstence(); Singleton2 s4=Singleton2.getInstence(); if(s3==s4){ System.out.println("s3与s4为同一实例"); }else{ System.out.println("s3不是s4为同一实例"); } } /** * 懒汉与饿汉的区别,当类加载时懒汉不创建实例,而饿汉是在类一加载就创建了实例,懒汉是在获取时再做判断, * 是否创建了实例。 * * 饿汉模式类加载比较慢,但运行时获取对象的速度比较快 ,线程安全 * 懒汉模式类类加载比较快,但运行时获取对象的速度比较慢,线程不安全 * */ }