设计模式--单例模式

 

经典单例模式原理
单例模式的意义
有些对象我们只需要一个:线程池、缓存、硬件设备等
如果多个实例会有造成冲突、结果的不一致性等问题
是否可以用静态变量方式来实现?或者程序员之间协商个全局变量?
Yes
单例模式:确保一个类最多只有一个实例,并提供一个全局访问点

经典单例模式实现原理
设计模式--单例模式

经典单例模式代码示例
·经典单例类的Java代码

Singleton



public class Singleton {
	
	private static Singleton uniqeInstance=null;
	
	private Singleton(){
		
	};
	
	public static Singleton getInstance()
	{
		if(uniqeInstance==null)
		{
			uniqeInstance=new Singleton();
		}
		return uniqeInstance;
		
	}

}


·一个简单的巧克力工厂项目代码

public class ChocolateFactory {

	private boolean empty;
	private boolean boiled;
	public volatile static ChocolateFactory uniqueInstance = null;

	private ChocolateFactory() {
		empty = true;
		boiled = false;
	}

	public static ChocolateFactory getInstance() {

		if (uniqueInstance == null) {
			synchronized (ChocolateFactory.class) {
				if (uniqueInstance == null) {
					uniqueInstance = new ChocolateFactory();
				}
			}
		}

		return uniqueInstance;

	}

	public void fill() {
		if (empty) {
			// 添加原料巧克力动作
			empty = false;
			boiled = false;
		}
	}

	public void drain() {
		if ((!empty) && boiled) {
			// 排出巧克力动作
			empty = true;
		}
	}

	public void boil() {
		if ((!empty) && (!boiled)) {
			// 煮沸
			boiled = true;
		}
	}
}



经典单例模式的优化
 ·多线程问题
·优化:
同步(synchronized)getInstance方法(比较消耗资源)

设计模式--单例模式
“急切”创建实例
设计模式--单例模式
双重检查加锁,volatile 使变量可见,synchronized 保证原子性
设计模式--单例模式

相关文章:

  • 2021-04-15
  • 2021-06-02
  • 2021-12-31
猜你喜欢
  • 2021-09-13
  • 2021-12-15
  • 2021-08-01
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案