1、单例模式(饿汉/懒汉)

在我们平常的开发过程中会用到很多设计模式,最近准备一一整理出来,后续会不断的更新!  先写一个最最见的的单例模式吧!

 

            1、私有化构造方法,使外部不能直接建立实例对象

            2、在本类内部创建私有化一个本类实例对象

            3、提供一个static方法,返回本类实例化对象,供外部直接调用

 

        1、饿汉式:(不管使用与否直接创建实例对象)

  1. public class Singleton{
  2.     //1私有化构造方法
  3.     private Singleton(){
  4.     }
  5.    
  6.     //创建本类实例对象,这里必须为static类型,可以被static方法调用
  7.     private static Singleton singleton = new Singleton();
  8.     //提供获取本类实例的方法,应为外部不能建立本类实例,所以写static方法可以用类名直接调用
  9.     public static Singleton getSingleton(){
  10.         return singleton;
  11.     }
  12.  }

    

        2、懒汉式(等需要使用的时候才去创建)

 

  1. public class Singleton{
  2.     private Singleton(){
  3.     }
  4.    private Static Singleton singleton = null;
  5.    
  6.    public static getSingleton(){
  7.        if(singleton == null){
  8.            singleton = new Singleton();
  9.        }
  10.        return Singleton;
  11.   }
  12. }

说明:懒汉式是线程不安全的。

 

-----

当然,单例模式深入的研究,也不止这些,还会有如何解决线程不安全问题,并且怎么保证效率比较高,这些会用到锁的概念,这些可以到网上找找别的博客看看。 

 ----线程安全的单列模式:(双重检查)

  1. public class MySingleton {  
  2.       
  3.     //使用volatile关键字保其可见性  
  4.     volatile private static MySingleton instance = null;  
  5.       
  6.     private MySingleton(){}  
  7.        
  8.     public static MySingleton getInstance() {  
  9.         try {    
  10.             if(instance != null){//懒汉式   
  11.                   
  12.             }else{  
  13.                 //创建实例之前可能会有一些准备性的耗时工作   
  14.                 Thread.sleep(300);  
  15.                 synchronized (MySingleton.class) {  
  16.                     if(instance == null){//二次检查  
  17.                         instance = new MySingleton();  
  18.                     }  
  19.                 }  
  20.             }   
  21.         } catch (InterruptedException e) {   
  22.             e.printStackTrace();  
  23.         }  
  24.         return instance;  
  25.     }  
  26. }  



        

 

posted @ 2016-03-16 14:48  迷路的小朋友  阅读(232)  评论(0编辑  收藏  举报