JAva実装単例

2036 ワード

最近仕事が忙しくないので、振り返ってjavaの基础を见てみると、その时、単例を勉强していた时、どうしてそんなことを书くのかよく分かりませんでした.ただ、先生が书いた単例のフォーマットを丸暗記して、単例によくある2つの方法を书いたばかりで、ついでにメモを取りました.開発の過程で第2の方法を推奨します.怠け者モードはスレッドの同期問題を考慮しなければならないので、実行効率は第2の方法より低いです.もちろん、第1の方法に夢中になってもいいです.
1、怠け者モード:このモードでSingletonTest 1がメモリに入ったとき、メモリにSingletonTest 1のオブジェクトはまだなく、プログラムがgetInstanceメソッドを呼び出したときにのみプログラムがオブジェクトを作成する.
package com.temp;

public class SingletonTest1 {
	/**
	 *        
	 */
	private static SingletonTest1 singleon =null;
	private SingletonTest1(){
	}
	public static synchronized SingletonTest1 getInstance(){
		/*
		 *       synchronized ,         ,
		 *   A        singleon==null ,
		 * B        	singleon = new SingletonTest1();
		 * B       singleton  ,   A     singleton==null    ture A         
		 * singleton  ,             ,               
		 */
		if(singleon==null){					
			singleon = new SingletonTest1();
		}
		return singleon;
	}
	
	public static void main(String[] args) {
		SingletonTest1 s1=SingletonTest1.getInstance();
		SingletonTest1 s2=SingletonTest1.getInstance();
		SingletonTest1 s3=SingletonTest1.getInstance();
		if(s1==s2&& s2==s3){
			System.out.println("       ");
			s1.fun();
		}else{
			System.out.println("       ");
		}
	}
	
	public void fun(){
		System.out.println("hello word");
	}
}

 2、餓漢モード:いわゆる餓漢モードとは、三七二十一にかかわらずsingletonオブジェクトを先に作成することである.
public class SingletonTest {
	/**
	 *        
	 */
	private static SingletonTest singleon = new SingletonTest();
	private SingletonTest(){
	}
	public static SingletonTest getInstance(){
		return singleon;
	}
	
	public static void main(String[] args) {
		SingletonTest s1=SingletonTest.getInstance();
		SingletonTest s2=SingletonTest.getInstance();
		SingletonTest s3=SingletonTest.getInstance();
		if(s1==s2 && s2==s3){
			System.out.println("       ");
			s1.fun();
		}else{
			System.out.println("       ");
		}
	}
	public void fun(){
		System.out.println("hello word");
	}
}