码迷,mamicode.com
首页 > 其他好文 > 详细

Pattern-No.07 设计模式之单例模式

时间:2015-04-14 11:23:29      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

1、确保一个类只有一个实例,并提供一个全局的访问点

2、饱汉式单例实现

package com.shma.singleton;

/**
 * 饱汉式单例实现
 * @author admin
 *
 */
public class Singleton01 {

	private static Singleton01 uniqueInstance = new Singleton01();
	
	private Singleton01() {
		
	}
	
	public static Singleton01 getInstance() {
		return uniqueInstance;
	} 
}

3、饿汉式单例实现

package com.shma.singleton;

/**
 * 饿汉式单例双锁机制
 * @author admin
 *
 */
public class Singleton02 {

	private volatile static Singleton02 uniqueInstance = null;
	
	private Singleton02() {
		
	}
	
	public static Singleton02 getInstance() {
		if(uniqueInstance == null) {
			synchronized (Singleton02.class) {
				if(uniqueInstance == null) {
					uniqueInstance = new Singleton02();
				}
			}
		}
		
		return uniqueInstance;
	}
}

4、实现巧克力锅炉类,巧克力锅炉是一个单例类

package com.shma.singleton.chocolate;

/**
 * 巧克力加工锅炉类
 * @author admin
 *
 */
public class ChocolateBoiler {

	//记录锅炉内原料是否为空
	private boolean empty = false;
	
	//记录锅炉内原料是否煮沸
	private boolean boiled = false;
	
	private volatile static ChocolateBoiler uniqueInstance = null;
	
	private ChocolateBoiler() {
		
	}
	
	public static ChocolateBoiler getInstance() {
		if(uniqueInstance == null) {
			synchronized (ChocolateBoiler.class) {
				if(uniqueInstance == null) {
					uniqueInstance = new ChocolateBoiler();
				}
			}
		}
		
		System.out.println("Returning instance of Chocolate Boiler");
		return uniqueInstance;
	}
	
	/**
	 * 装满锅炉
	 * 原料为空
	 */
	public void fill() {
		if (isEmpty()) {
			empty = false;
			boiled = false;
			// fill the boiler with a milk/chocolate mixture
		}
	}
 
	/**
	 * 排出成品
	 * 原料不能为空并且已经被煮沸
	 */
	public void drain() {
		if (!isEmpty() && isBoiled()) {
			// drain the boiled milk and chocolate
			empty = true;
		}
	}
 
	/**
	 * 煮沸方法
	 * 条件是锅炉原料不能为空并且没有被煮沸过
	 */
	public void boil() {
		if (!isEmpty() && !isBoiled()) {
			// bring the contents to a boil
			boiled = true;
		}
	}
  
	public boolean isEmpty() {
		return empty;
	}
 
	public boolean isBoiled() {
		return boiled;
	}
}

package com.shma.singleton.chocolate;

public class ChocolateController {

	public static void main(String[] args) {
		ChocolateBoiler boiler = ChocolateBoiler.getInstance();
		
		//装入原料
		boiler.fill();
		//煮沸
		boiler.boil();
		//排出
		boiler.drain();
		
		// will return the existing instance
		ChocolateBoiler boiler2 = ChocolateBoiler.getInstance();
	}
}


Pattern-No.07 设计模式之单例模式

标签:

原文地址:http://my.oschina.net/shma1664/blog/400838

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!