设计模式,1/23,单例模式

顾名思义,只有一个实例的模式。

禅那本书举了个好例子,皇帝,这应该单独写一个类,但是应该是唯一的,只有一个实例,不能让人随便new出很多个来。

解决方法就是限制构造函数的权限,本来new对象就是用构造函数的,既然构造函数不能访问了,那自然就不能new对象了。

但是又不能一个实例都没有,所以:

 1 class Singleton {
 2     private static final Singleton singleton = new Singleton();
 3 
 4     private Singleton() {}
 5     
 6     public static Singleton getInstance() {
 7         return singleton;
 8     }
 9     
10     public static void doSomething() {
11         //blahblahblah
12     }
13 }
像这样

直接在类里面存一个自己的实例,然后用一个静态方法来获取它。

这样别人没办法用这个类new对象,如果需要实例,那就用getInstance()来取。

 

建议一则:

  其他的方法尽量定为静态方法,不然是这样的:

Singleton.getInstance().do();

  脱裤子放屁,明明可以:

Singleton.do();

 

另外单例模式有线程安全的问题,等以后碰到这个问题再说吧。

 1 class Singleton {
 2     private static Singleton singleton = null;
 3 
 4     private Singleton() {}
 5     
 6     public static Singleton getInstance() {
 7         if (singleton == null) {
 8             singleton = new Singleton();
 9         }
10         
11         return singleton;
12     }
13     
14     public static void doSomething() {
15         //blahblahblah
16     }
17 }
Synchronized

一个线程刚判断完还没来得及new对象,另一个线程也开始判断而且通过了,就出现了两个对象。

解决方法见折叠标题,不过没验证过,将来再说啦。

posted @ 2014-03-16 00:58  Chihane  阅读(132)  评论(0编辑  收藏  举报