现在的位置: 首页 > 综合 > 正文

单件模式(Singleton Pattern)(二):HeadFirst中的巧克力工厂的设计

2018年02月04日 ⁄ 综合 ⁄ 共 1387字 ⁄ 字号 评论关闭


以《HeadFirst设计模式》中的巧克力工厂为例,介绍单模式的使用场景。

一、问题描述

   现代化的巧克力工厂具备计算机控制的巧克力锅炉,锅炉做的事就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。Choc-O-Holic公司有一个巧克力锅炉控制器用于控制锅炉活动的进行,比如:锅炉内为空时才允许加入原料、锅炉内存在原料并且尚未煮沸时才允许进行煮沸、排出牛奶和巧克力时要求炉内的存在原料并且已经被煮沸。

万一存在多个ChocolateBoiler(巧克力锅炉),就不一定按照我们限制的流程去生产,从而出现很多糟糕的情况,所以必须将ChocolateBoiler设计成一个单件。


二、类图

三、代码

ChocolateBoiler(巧克力锅炉)类:

package com.pattern.singleton;
 
public class ChocolateBoiler {
	private boolean empty;
	private boolean boiled;
	private static ChocolateBoiler uniqueInstance;
  
	private ChocolateBoiler() {
		empty = true;
		boiled = false;
	}
  
	public static ChocolateBoiler getInstance() {
		if (uniqueInstance == null) {
			System.out.println("Creating unique instance of Chocolate Boiler");
			uniqueInstance = new ChocolateBoiler();
		}
		System.out.println("Returning instance of Chocolate Boiler");
		return uniqueInstance;
	}

	public void fill() {
		if (isEmpty()) {
			empty = false;
			boiled = false;
			// 在锅炉内填满巧克力和牛奶的混合物
		}
	}
 
	public void drain() {
		if (!isEmpty() && isBoiled()) {
			//排出煮沸的巧克力和牛奶
			empty = true;
		}
	}
 
	public void boil() {
		if (!isEmpty() && !isBoiled()) {
			//将炉内物煮沸
			boiled = true;
		}
	}
  
	public boolean isEmpty() {
		return empty;
	}
 
	public boolean isBoiled() {
		return boiled;
	}
}

ChocolateController锅炉控制器类:

package com.pattern.singleton;
 
public class ChocolateController {
	public static void main(String args[]) {
		ChocolateBoiler boiler = ChocolateBoiler.getInstance();
		boiler.fill();
		boiler.boil();
		boiler.drain();

		//ChocolateBoiler boiler2 = ChocolateBoiler.getInstance();
	}
}

转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8866755

抱歉!评论已关闭.