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

时间:2023-07-16 17:15:08

设计模式

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

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: }

对比之下发现:

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