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

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


一、问题描述


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

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


二、类图



三、代码


ChocolateBoiler(巧克力锅炉)类:

  1. package com.pattern.singleton;  
  2.    
  3. public class ChocolateBoiler  
  4.     private boolean empty;  
  5.     private boolean boiled;  
  6.     private static ChocolateBoiler uniqueInstance;  
  7.     
  8.     private ChocolateBoiler()  
  9.         empty true 
  10.         boiled false 
  11.      
  12.     
  13.     public static ChocolateBoiler getInstance()  
  14.         if (uniqueInstance == null 
  15.             System.out.println("Creating unique instance of Chocolate Boiler");  
  16.             uniqueInstance new ChocolateBoiler();  
  17.          
  18.         System.out.println("Returning instance of Chocolate Boiler");  
  19.         return uniqueInstance;  
  20.      
  21.   
  22.     public void fill()  
  23.         if (isEmpty())  
  24.             empty false 
  25.             boiled false 
  26.             // 在锅炉内填满巧克力和牛奶的混合物  
  27.          
  28.      
  29.    
  30.     public void drain()  
  31.         if (!isEmpty() && isBoiled())  
  32.             //排出煮沸的巧克力和牛奶  
  33.             empty true 
  34.          
  35.      
  36.    
  37.     public void boil()  
  38.         if (!isEmpty() && !isBoiled())  
  39.             //将炉内物煮沸  
  40.             boiled true 
  41.          
  42.      
  43.     
  44.     public boolean isEmpty()  
  45.         return empty;  
  46.      
  47.    
  48.     public boolean isBoiled()  
  49.         return boiled;  
  50.      
  51.  

ChocolateController锅炉控制器类:
  1. package com.pattern.singleton;  
  2.    
  3. public class ChocolateController  
  4.     public static void main(String args[])  
  5.         ChocolateBoiler boiler ChocolateBoiler.getInstance();  
  6.         boiler.fill();  
  7.         boiler.boil();  
  8.         boiler.drain();  
  9.   
  10.         //ChocolateBoiler boiler2 ChocolateBoiler.getInstance();  
  11.      
  12.  


转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8866755
posted @ 2014-10-08 15:05  Wishmeluck  阅读(586)  评论(0编辑  收藏  举报