단일 모델 의 몇 가지 실현 -

3252 단어 단일 모드
package com.doctor.java.design_pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *          --《java    -               》
 * 
 * @author doctor
 *
 * @time 2015 4 24    11:11:03
 */
public class SingletonPattern {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		LazySingleton.getInstance();
		LazySingleton.getInstance();
		LazySingleton.getInstance();
		//
		EagerSingleton.getInstance();
		EagerSingleton.getInstance();

		//
		DoubleCheckLazySingleton.getInstance();
		DoubleCheckLazySingleton.getInstance();
		DoubleCheckLazySingleton.getInstance();

		//
		Singleton.getInstance();
		Singleton.getInstance();

		//
		EnumSingleton.instance.EnumSingletonOperation();
		EnumSingleton.instance.EnumSingletonOperation();

	}

	/**
	 *      ,    
	 */
	public static class LazySingleton {
		private static final Logger log = LoggerFactory.getLogger(LazySingleton.class);
		//       ,         
		private static LazySingleton singleton = null;

		//       ,        
		private LazySingleton() {
			log.info(LazySingleton.class.getName() + "         ");
		}

		/**
		 *       ,                       ,    
		 * 
		 * @return
		 */
		public static synchronized LazySingleton getInstance() {
			if (singleton == null) {
				singleton = new LazySingleton();
			}
			return singleton;
		}
	}

	/**
	 *      ,    ,          
	 */
	public static class DoubleCheckLazySingleton {
		private static final Logger log = LoggerFactory.getLogger(DoubleCheckLazySingleton.class);
		//       ,         
		private static DoubleCheckLazySingleton singleton = null;

		//       ,        
		private DoubleCheckLazySingleton() {
			log.info(DoubleCheckLazySingleton.class.getName() + "         ");
		}

		/**
		 *       ,                       ,    
		 * 
		 * @return
		 */
		public static DoubleCheckLazySingleton getInstance() {
			if (singleton == null) {
				synchronized (DoubleCheckLazySingleton.class) {
					if (singleton == null) {
						singleton = new DoubleCheckLazySingleton();
					}
				}
			}
			return singleton;
		}
	}

	/**
	 *      
	 */
	private static class EagerSingleton {
		private static final Logger log = LoggerFactory.getLogger(EagerSingleton.class);

		private static final EagerSingleton instance = new EagerSingleton();

		private EagerSingleton() {
			log.info(EagerSingleton.class.getName() + "         ");

		}

		public static EagerSingleton getInstance() {
			return instance;
		}
	}

	/**
	 *     +    =   +             
	 */

	public static class Singleton {
		private static final Logger log = LoggerFactory.getLogger(Singleton.class);

		private Singleton() {
			log.info(Singleton.class.getName() + "         ");
		}

		public static Singleton getInstance() {
			return SingletonHolder.instance;
		}

		/**
		 *       ,           ,                    ,            ,          
		 */
		private static class SingletonHolder {
			//      , JVM       
			private static Singleton instance = new Singleton();
		}
	}

	/**
	 *          ,     ,  jvm    
	 */

	public static enum EnumSingleton {
		//         ,     EnumSingleton     。
		instance;
		/**
		 *     ,          
		 */
		public void EnumSingletonOperation() {
			//     
		}
	}
}

좋은 웹페이지 즐겨찾기