设计模式之五:单件模式(巧克力工厂锅炉 模拟流程)

单件模式:确保一个类只有一个实例,并提供一个全局访问点。(巧克力工厂锅炉 模拟流程)

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 }
posted @ 2012-09-20 09:19  黄辉杰  阅读(815)  评论(0编辑  收藏  举报