1. 程式人生 > 實用技巧 >python之從excel讀取測試資料004

python之從excel讀取測試資料004

單例模式

概述

單例模式(建立型設計模式)定義:確保一個類在任何情況下都絕對只有一個例項,並提供一種全域性的訪問點

單例模式的類圖:

單例模式的分類

餓漢式單例模式(靜態常量)
public class SingleTon {
      private  SingleTon(){}
      /**靜態常量餓漢式*/
      private  final  static   SingleTon INSTANCE =new SingleTon();
      public  static  SingleTon getInstance(){
          return  INSTANCE;
      }

    
    //Junit單元測試
      @Test
    public void test(){
        SingleTon instance = SingleTon.getInstance();
        SingleTon instance1 = SingleTon.getInstance();
        System.out.println(instance==instance1);
    }
餓漢式單例模式二(靜態程式碼塊)
public class SingleTon2 {

    private  SingleTon2(){};
    private  static  SingleTon2 instace;
    static {
        instace=new SingleTon2();
    }
    public  static SingleTon2 getInstance(){
        return  instace;
    }
}
 //Junit單元測試
      @Test
    public void test(){
        SingleTon2 instance2 = SingleTon2.getInstance();
        SingleTon2 instance3 = SingleTon2.getInstance();
        System.out.println("靜態程式碼塊方式:"+(instance2==instance3));
    }
懶漢式單例模式一
public class SingleTon3 {
    private  static  SingleTon3 instance;
     private  SingleTon3(){}
    //執行緒不安全
    public static  SingleTon3 getInstance(){
        if (instance==null){
            instance=new SingleTon3();
        }
        return  instance;
    }
懶漢式單例模式二
  private  static  SingleTon3 instance;
     private  SingleTon3(){}
    //效率太低
    public static  synchronized SingleTon3 getInstance(){
        if (instance==null){
            instance=new SingleTon3();
        }
        return  instance;
    }
懶漢式單例模式三(推薦使用)
//volatile 輕量級 同步機制 
public  static  volatile  SingleTon3 instace;
     private  SingleTon3(){}
    //雙重檢查
   public  static  SingleTon3 getInstance(){
        if (instace==null){
            synchronized (SingleTon3.class){
                if (instace==null){
                    instace=new SingleTon3();
                }
            }
        }
單例模式之靜態內部類
 private   SingleTon4(){}
    private  static class SingleTonInner{
        private  static  final  SingleTon4  INSANCE=new SingleTon4();
    }
    public  static SingleTon4 getInstance(){
        return  SingleTonInner.INSANCE;
    }

//在多執行緒的情況下
new  Thread(()->{
            SingleTon4 singleTonInner = SingleTon4.getInstance();
            System.out.println(singleTonInner);
        }).start();
        new  Thread(()->{
            SingleTon4 singleTonInner2 = SingleTon4.getInstance();
            System.out.println(singleTonInner2);
        }).start();  
單例模式之列舉
public class EnumSingleTon {
    public static void main(String[] args) {
        EnumSingleTonObject instance = EnumSingleTonObject.INSTANCE;
        EnumSingleTonObject instance2 = EnumSingleTonObject.INSTANCE;
        System.out.println(instance=instance2);//true
    }
}
enum EnumSingleTonObject{
    /**/
    INSTANCE;
    public  void  print(){
        System.out.println(this.hashCode());
    }
}