자바 디자인 모델 의 "단일 예"

소개
단일 모델 은 상대 적 으로 흔히 볼 수 있 는 디자인 모델 이다.그 본질은 하나의 클래스 대상 을 같은 JVM 에서 하나의 인 스 턴 스 만 있 게 하 는 것 이다.이런 디자인 모델 은 자주 공장 모델 과 배합 하여 사용한다.
예시
다음은 스 레 드 안전 을 고려 하지 않 은 예 입 니 다. [codesyntax lang = "자바" lines = "normal"]
package org.suren.pattern;


/**
 * @author suren
 * @date 2015-4-1
 *
 *      、         。
 *           ,     3 5                。
 *
 * http://surenpi.com
 */
public class SingleTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int count = 10;

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
				}
			}.start();
		}

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
				}
			}.start();
		}
	}
}

/**
 * @author suren
 * @date 2015-4-1
 *
 * http://surenpi.com
 */
class Single
{
	private static Single single = null;

	//        ,                   
	private Single(){}

	/**
	 *             
	 * @return
	 */
	public static Single getInstance()
	{
		if(single == null)
		{
			single = new Single();
		}

		return single;
	}
}
[/codesyntax]
다음은 스 레 드 안전 의 예 입 니 다. [codesyntax lang = "java" lines = "normal"]
package org.suren.pattern.safe1;


/**
 * @author suren
 * @date 2015-4-1
 *
 *      、         。
 *           ,     3 5                。
 *
 * http://surenpi.com
 */
public class SafeSingleTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int count = 5000;
		final long begin = System.currentTimeMillis();

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
					System.out.println(System.currentTimeMillis() - begin);
				}
			}.start();
		}

		for(int i = 0; i < count; i++)
		{
			new Thread(){
				public void run()
				{
					System.out.println(Single.getInstance());
					System.out.println(System.currentTimeMillis() - begin);
				}
			}.start();
		}
	}
}

/**
 * @author suren
 * @date 2015-4-1
 *
 * http://surenpi.com
 */
class Single
{
	private static Single single = null;

	//        ,                   
	private Single(){}

	/**
	 *             
	 * @return
	 */
	public static synchronized Single getInstance()
	{
		if(single == null)
		{
			single = new Single();
		}

		return single;
	}
}
[/codesyntax]
참고 하 다

좋은 웹페이지 즐겨찾기