单件模式:确保一个类只有一个实例,并提供一个全局访问点。(巧克力工厂锅炉 模拟流程)
java中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。
工程名称:SingletonPattern(eclipse) 下载目录: , 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 }