Java笔记(十一)……单例设计模式

设计模式

解决某一类问题最行之有效的方法

Java中有23中设计模式

单例设计模式

解决一个类在内存中只存在一个对象

思路

    1. 将构造函数私有化
    2. 在类中创建一个本类对象
    3. 提供一个方法可以获取到对象

两种方法

饿汉式:类建立时分配对象

 

   1: class Single
   2: {
   3:     private Single(){}
   4:     //类建立时即初始化了对象
   5:     private static Single s = new Single();
   6:     public static Single getInstance()
   7:     {
   8:         return s;
   9:     }
  10: }

懒汉式:调用时才分配对象,也叫做对象的延时加载

   1: class Single
   2: {
   3:     private Single(){}
   4:     private static Single s;
   5:     public static Single getInstance()
   6:     {
   7:         //调用时再分配对象
   8:         if(s == null)
   9:             s = new Single();
  10:         return s;
  11:     }
  12: }

但是此懒汉式如果是多线程调用,容易出现new多个对象的问题,解决方法如下:

   1: class Single
   2: {
   3:     private Single(){}
   4:     private static Single s;
   5:     public static Single getInstance()
   6:     {
   7:         //调用时再分配对象
   8:         //为了避免每次都访问锁而设置的判断
   9:         if(s == null)
  10:         {
  11:             //加锁防止多线程调用时问题
  12:             synchronized(Single.class)
  13:             {
  14:                 if(s == null)
  15:                 {
  16:                     s = new Single();
  17:                 }
  18:             }
  19:         }
  20:         return s;
  21:     }
  22: }

对比之下发现:

懒汉式代码较多,而且不安全,所以建议使用饿汉式。

posted @ 2013-10-17 12:51  ShawnWithSmallEyes  阅读(408)  评论(0编辑  收藏  举报