軟體設計模式——單例模式
我怎麼感覺自己頹廢了好久?明明只過了一個雙十一哇…
大家好像很喜歡yolo的那兩篇部落格呢,深刻的感受到了人工智慧時代的熱潮~
還是跟大家交代一下叭,雖然呢yoloV3的教程過了很久,但是我們團隊還是在用這個技術。不過現在沒有再識別自行車了,而是商品識別(買了好多吃的,看著不能吃系列)。我有種寫深度學習部落格的衝動~喵嗚
我好像又跑題了…
今天呢,寫一寫花花同學覺得很有用的一門課——軟體設計模式。說實話,學到後面理解起來有一點點繞,總感覺上課的時候是懂了的。但可能因為沒有完全理解,So真正到例題和專案裡面就很混亂,覺得各種類的關係搞不清楚。
我在網上找了很多有關的教程,覺得菜鳥教程
單例模式
最最簡單的單例模式例子就是,想象玩掃雷的時候點出來3個小視窗一起玩,但事實上系統不會允許這樣的結果。第二次點選掃雷按鈕,第一個視窗閃兩下就完啦。這減少了記憶體的開銷,避免了頻繁的建立和銷燬過程。(我感覺教材和專業教程估計會講得清楚一些)
So我們直接來看看例項,菜鳥裡面的例子我就不用了。感覺實驗裡的例子更有水平(更繞)一點,我們一起來看看吧~
題目
很多應用專案都有配置檔案,這些配置檔案裡面定義一些應用需要的引數資料。
通常客戶端使用這個類是通過new一個AppConfig的例項來得到一個操作配置檔案內容的物件。如果在系統執行中,有很多地方都需要使用配置檔案的內容,系統中會同時存在多份配置檔案的內容,這會嚴重浪費記憶體資源。
事實上,對於AppConfig類,在執行期間,只需要一個物件例項就夠了。那麼應該怎麼實現呢?
UML圖
簡單程式碼(我用的是餓漢模式)
AppConfig.java下:
public class AppConfig { private String ParameterA; private static AppConfig instance = new AppConfig(); private AppConfig() {} public static AppConfig GetAppConfig() { return instance; } public String GetParameterA() { return ParameterA; } public void SetParameterA(String ParameterA) { this.ParameterA=ParameterA; } }
Singleton.java下:
public class Singleton {
public static void main(String[] args) {
AppConfig app1 = AppConfig.GetAppConfig();
AppConfig app2 = AppConfig.GetAppConfig();
app1.SetParameterA("hello");
app2.SetParameterA("world");
if(app1.equals(app2)) {
System.out.println("app1和app2是同一例項");
}else {
System.out.println("app1和app2是不同例項");
}
System.out.println(app1.GetParameterA());
System.out.println(app2.GetParameterA());
}
}
哇哦,今天的模式好簡單哇~感動cry,總結一下啦:
單例模式重點在於建構函式的私有化和建立物件時的檢測,類建立自己的物件,並且確保了只有單個物件被建立。
還有餓漢式的方法和雙檢鎖啥啥的方法,下面寫餓漢式的,雙檢鎖的具體也就是用synchronized~
public class Singleton {
private static AppConfig instance;
private Singleton (){}
public static AppConfig GetAppConfig() {
if (instance == null) {
instance = new AppConfig();
}
return instance;
}
}
今天是碼程式碼花,看起來終於有點計算機繫了~就是有點簡單了,不符合我的水準(踢開)。
單例模式感覺不會有很大用,但是卻是最好懂的一個模式了。啾咪~