设计模式之五:单件模式(巧克力工厂锅炉 模拟流程)
单件模式:确保一个类只有一个实例,并提供一个全局访问点。(巧克力工厂锅炉 模拟流程)
java中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。
工程名称:SingletonPattern(eclipse) 下载目录:http://www.cnblogs.com/jrsmith/admin/Files.aspx , SingletonPattern.zip;
1 package com.jyu.singletonpattern; 2 3 /** 4 * "双重检查枷锁":首先检查是否实例已经创建了,如果尚未创建,"才"进行同步。 5 * 这样一来只有第一次会同步,这正是我们想要的。 6 * 注:双重检查枷锁不适用于1.4及更早版本的java 7 * @author root 8 * 9 */ 10 public class Singleton { 11 12 /*volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance*/ 13 private volatile static Singleton uniqueInstance; 14 private int count; 15 16 private Singleton(){ 17 count += 1; 18 System.out.println("双重检查枷锁..." + count); 19 } 20 21 public static Singleton getInstance(){//检查实例,如果不存在,就进入同步区块 22 if(uniqueInstance == null){ //注意,只有第一次才彻底执行这里的代码 23 synchronized(Singleton.class){ 24 if(uniqueInstance == null){ //进入区块后,在检查一次。如果仍是null,才创建实例。 25 uniqueInstance = new Singleton(); 26 } 27 } 28 } 29 return uniqueInstance; 30 } 31 32 public int getCount() { 33 return count; 34 } 35 36 public void setCount(int count) { 37 this.count = count; 38 } 39 40 }
1 package com.jyu.singletonpattern; 2 3 public class test { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 10 Singleton singleton = Singleton.getInstance(); 11 /*Singleton singleton2 = Singleton.getInstance(); 12 Singleton singleton3 = Singleton.getInstance(); 13 Singleton singleton4 = Singleton.getInstance(); 14 Singleton singleton5 = Singleton.getInstance(); 15 Singleton singleton6 = Singleton.getInstance(); 16 Singleton singleton7 = Singleton.getInstance(); 17 Singleton singleton8 = Singleton.getInstance(); 18 Singleton singleton9 = Singleton.getInstance(); 19 Singleton singleton0 = Singleton.getInstance(); 20 Singleton singleton10 = Singleton.getInstance(); 21 Singleton singleton11 = Singleton.getInstance(); 22 Singleton singleton12 = Singleton.getInstance();*/ 23 } 24 25 }