1. 程式人生 > >軟體設計模式——單例模式

軟體設計模式——單例模式

我怎麼感覺自己頹廢了好久?明明只過了一個雙十一哇…

大家好像很喜歡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;  
	}  
}

今天是碼程式碼花,看起來終於有點計算機繫了~就是有點簡單了,不符合我的水準(踢開)。
單例模式感覺不會有很大用,但是卻是最好懂的一個模式了。啾咪~