python之從excel讀取測試資料004
阿新 • • 發佈:2020-12-05
單例模式
概述
單例模式(建立型設計模式)定義:確保一個類在任何情況下都絕對只有一個例項,並提供一種全域性的訪問點
單例模式的類圖:
單例模式的分類
餓漢式單例模式(靜態常量)
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());
}
}