java-23种设计模式学习

单例模式

    单例模式是一种类的创建模式,使用单例模式可以保证为一个类只生成唯一的实例对象,也就是说,在整个程序空间中,该类只存在一个实例对象。

   常见的单例的实现有:饿汉式、懒汉式、双重判断、枚举、静态内部类。

   应用:spring的bean对象都是单例的,采用饿汉式进行创建。

饿汉式:

package ist.test.model;

/**
 * 饿汉式
 */
public class Singleton01 {

	// 私有静态对象
	private static Singleton01 singleton01 = new Singleton01();
	
	// 构造方法私有化
	private Singleton01() {}
	
	// 获取对象的静态方法
	public Singleton01 getSingleton01() {
		return singleton01;
	}
	
}

懒汉式:

package ist.test.model;

/**
 * 懒汉式
 */
public class Singleton02 {

	// 私有静态对象声明
	private static Singleton02 singleton02 = null;
	
	// 构造方法私有化
	private Singleton02() {}
	
	// 私有静态方法
	public static Singleton02 getSingleton02() {
		if (null == singleton02) {
			singleton02 = new Singleton02();
		}
		return singleton02;
	}
}

双重锁式:

package ist.test.model;

/**
 * 双重检查加锁
 */
public class Singleton03 {

	// 声明对象
	private static Singleton03 singleton03 = null;
	
	// 构造方法私有化
	private Singleton03 () {}
	
	// 获取对象的公有静态方法
	public static Singleton03 getSingleton03() {
		if (singleton03 == null) {
			synchronized (Singleton03.class) {
				if (singleton03 == null) {
					singleton03 = new Singleton03();
				}
			}
		}
		return singleton03;
	}
	
}

静态内部类式:

package ist.test.model;

/**
 * 使用静态内部类实现单例模式
 */
public class Singleton04 {

	private static class SingletonHelper {
		/**
		 * 静态初始化器,由JVM保证线程安全
		 */
		private static Singleton04 instance = new Singleton04();
	}
	
	private Singleton04() {}
	
	public static Singleton04 getSingleton04() {
		return SingletonHelper.instance;
	}
	
}

 

你可能感兴趣的:(java基础,java设计模式)