什麼是單例模式?
單例可以理解為乙個類只有乙個例項,因此單例模式就是為了保證這個類只會有乙個例項而總結的一種方法。
它在什麼情況下使用的?
從單例模式的定義中我們可以看出——單例模式的使用自然是當我們的系統中某個物件只需要乙個例項的情況,例如:作業系統中只能有乙個任務管理器,操作檔案時,同一時間內只允許乙個例項對其操作等。
由此,單例模式有兩個關鍵點:
通常例項是在呼叫類時,new出來的。但是為了保證乙個類只有乙個例項,因此例項的建立應該是:
因為例項在類內部建立,建構函式還是私有的,所以需要乙個方法/屬性來允許外部獲取這個例項。這個方法特點是:
* 1、public
* 2、無需例項即可呼叫,即static的方法
* 3、返回值是內部例項
github版:1單例模式.cs
原理版:
///
/// 單執行緒版單例模式
///public
class singleton_0
////// 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點
//////
public
static singleton_0 getinstance()
return uniqueinstance;
}}
多執行緒版本,就是多加了乙個鎖:
///
/// 多執行緒下單例模式的實現
///public
class singleton_t
////// 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點
//////
public
static singleton_t getinstance()}}
return uniqueinstance;
}#region 資料
public
int data = 0;
public
string strdata = "0";
#endregion
}
簡單執行測試一下:
呼叫的委託和包含了這個單例的類
delegate
void show(string data);
public
void
showtextbox(string data)
private
class testmodel
}
button事件
private
void
button1_click(object sender, eventargs e)
);test1.data = 1;
test1.strdata = "1";
invoke(new show(showtextbox), new
object );
var test2 = singleton_t.getinstance();
invoke(new show(showtextbox), new
object );
testmodel test3 = new testmodel();
test3.initializer();
invoke(new show(showtextbox), new
object );
test1.strdata = "3";
invoke(new show(showtextbox), new
object );
}
結果:
初始值:0單例模型還是比較簡單的賦值後:1
獲取的第二個例項值:1
在另乙個類中的作為成員變數時:1
所有例項同步變化:3
設計模式入門 單例模式
1.什麼是單例模式?就是整個類就有乙個例項,並提供乙個訪問它的全域性訪問點。2.單例模式的存在形式?飢漢模式 飽漢模式,雙重鎖模式 圖3.類結構圖 圖1.飢漢模式 public class singletonhungry public static singletonhungry getinstan...
設計模式1 單例模式
文章引用出處 singleton模式是最簡單最常用的設計模式。1,定義 確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個該類。2,單例模式優點 1 單例模式在記憶體中只有乙個例項,減少了記憶體的開支。2 單例模式只生成乙個例項模式,減少了系統效能的開銷。如當乙個物件的產生需要比較多的系統資...
設計模式1 單例模式
單例模式,利用工廠類只生產乙個例項或者有限個例項,比如乙個系統中只有乙個主機板,乙個顯示卡,但是有些系統中也可以存在多個,雙顯示卡,雙顯示器等等。這些在singleton module中都是可以定義的。當然我們也可以使用全域性的變數或者靜態類或者物件去做,但是單例模式的存在是有其優點的。public...