2007-07-05

(2)创建模式之单态模式 singleton

关键字: 模式, pattern

 

Q女士是在太喜欢干净了,每天都打扫3遍卫生,家里弄得是一尘不染。

这天,Y先生在家休息,和Q女士一起打扫卫生。

干了一会,Y先生突然发现了一个问题,就是家里的抹布突然多了起来。Y先生观察了一会,终于发现哪出问题了。

原来Y先生和Q女士一起干活,当Q女士用抹布的时候,Y先生想用的时候,就拿出来一个新的。最糟糕的是,有的时候

两个人都忘了把抹布放到了什么地方,只好再拿新的。

Y先生:老婆等等,你不觉得咱们家现在抹布太多了吗?

Q女士:嗯,是多了一点,怎么搞得?

Y先生:我来想个办法吧:

java 代码
  1. public class Mabu {   
  2.        
  3.     private static Mabu instance = new Mabu();   
  4.        
  5.     public static Mabu getMabu() {   
  6.            
  7.         return instance;   
  8.     }   
  9.        
  10. }  

Q女士:看起来不错,可是,我仍然可以拿一个新的抹布,不是吗? Mabu mabu = new Mabu();

Y先生:嗯,我得修改一下:

java 代码
  1. public class Mabu {   
  2.        
  3.     private static Mabu instance = new Mabu();   
  4.        
  5.     private Mabu() {   
  6.            
  7.     }   
  8.        
  9.     public static Mabu getMabu() {   
  10.            
  11.         return instance;   
  12.     }   
  13.        
  14. }  

Q女士:嗯,确实,这样就不会弄得乱了,可是,如果我们不打扫卫生的时候,卫生间里为什么还要放一个抹布?

Y先生:对,我再修改一下:

java 代码
  1. public class Mabu {   
  2.        
  3.     private static Mabu instance = null;   
  4.        
  5.     private Mabu() {   
  6.            
  7.     }   
  8.        
  9.     public static Mabu getMabu() {   
  10.            
  11.         if(instance==null) {   
  12.             instance = new Mabu();   
  13.         }   
  14.            
  15.         return instance;   
  16.     }   
  17.        
  18. }  

 Q女士:这个方案确实不错,可是如果我们两个同时需要抹布,你能保证只存在一个抹布?我指得是“同时”。

Y先生:我明白你的意思了,那还得修改一下:

java 代码
  1. public class Mabu {   
  2.        
  3.     private static Mabu instance = null;   
  4.        
  5.     private Mabu() {   
  6.            
  7.     }   
  8.        
  9.     public static synchronized Mabu getMabu() {   
  10.            
  11.         if(instance==null) {   
  12.             instance = new Mabu();   
  13.         }   
  14.            
  15.         return instance;   
  16.     }   
  17.        
  18. }  

Y先生得意地一笑:这下在咱们家就只能存在一个抹布了!!!

Q女士:只能使用一个抹布???难道你想让我们半夜才打扫完卫生吗??快给我去掉这个没有用的东西!!

于是。。。。抹布再次遍布于家中。。。。

评论
yananay 2007-07-12
public static synchronized Mabu getMabu()

不可能同时拿到得
huangyh 2007-07-10
呵呵,到是挺有意思的,
Mabu a = getMabu();
Mabu b = getMabu();
虽然拿的是同一块,但是2个人都可以同时时用.所以说是拿抹布,好象不是很恰当,再想想,看有没有更合适的例子:)
发表评论

您还没有登录,请登录后发表评论

yananay
搜索本博客
我的相册
D35bafa8-5bf0-475f-aa06-16f3080557a1-thumb
tdd
共 3 张
存档
最新评论