当前位置 : 主页 > 编程语言 > c++ >

设计模式之单例模式

来源:互联网 收集:自由互联 发布时间:2021-07-03
饿汉模式 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为同一实例");
		}
	}
/**
 * 懒汉与饿汉的区别,当类加载时懒汉不创建实例,而饿汉是在类一加载就创建了实例,懒汉是在获取时再做判断,
 * 是否创建了实例。
 * 
 * 饿汉模式类加载比较慢,但运行时获取对象的速度比较快 ,线程安全
 * 懒汉模式类类加载比较快,但运行时获取对象的速度比较慢,线程不安全
 * */
}
网友评论