设计模式学习笔记(1)——单利模式

单例模式必须只有一个实例,并且提供一个全局访问方法。

解析经典单利模式实例:

 1 package designPatterns;
 2 
 3 public class Singleton {
 4 
 5      //利用一个静态变量来记录类的唯一实例
 6 
 7      private static Singleton uniqueInstance;
 8 
 9      //声明私有构造器,只有本类可以调用该构造器
10 
11      private Singleton(){}
12 
13      //创建一个静态的方法获取实例对象
14 
15      public static Singleton getSingletonObj(){
16 
17          if(uniqueInstance==null){
18 
19               uniqueInstance=new Singleton();
20 
21          }
22 
23          return uniqueInstance;
24 
25      }
26 
27 }
View Code

解决多线程同步问题:

  1. 添加线程同步synchronize

  例如:每次都进行同步效率较低,适用于较少适用对象场合

package designPatterns.singleton;

public class Singleton {

    //利用一个静态变量来记录类的唯一实例

    private static Singleton uniqueInstance;

    //声明私有构造器,只有本类可以调用该构造器

    private Singleton(){}

    //创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

    public static synchronized Singleton getSingletonObj(){

        if(uniqueInstance==null){

            uniqueInstance=new Singleton();

        }

        return uniqueInstance;

    }

   

}

2.创建急切单利模式:长时间占用内存(适用与频繁适用对象场合)

public class Singleton {

//利用一个静态变量来记录类的唯一实例

private static Singleton uniqueInstance=new Singleton();;

//声明私有构造器,只有本类可以调用该构造器

private Singleton(){}

//创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

public static Singleton getSingletonObj(){

     return uniqueInstance;

}

}

3.双重检查加锁:

例如:只有第一次创建对象的时候才进行同步(volatile只用于JDK4.0以上版本

public class Singleton {

    //利用一个静态变量来记录类的唯一实例

    private static volatile Singleton uniqueInstance ;

    //声明私有构造器,只有本类可以调用该构造器

    private Singleton(){}

    //创建一个静态的方法获取实例对象(synchronized多线程处理,保证只有一个实例)

    public static  Singleton getSingletonObj(){

        if(uniqueInstance==null){

            synchronized(Singleton.class){

                uniqueInstance=new Singleton();

            }

        }

        return uniqueInstance;

    }

}

posted @ 2016-12-13 11:56  求学之道  阅读(338)  评论(0编辑  收藏  举报