二十三.单例模式
單例模式:
?????? 保證一個類僅有一個實(shí)例,并提供一個訪問它的全局訪問點(diǎn)。
?????? 類自身負(fù)責(zé)保存它的唯一實(shí)例。
注意:多線程
?????? 使用鎖,或C#靜態(tài)類——Demo3
?
?
Demo1:——WinForm
?????? public partial class Form1 : Form
??? {
???????public Form1()
???????{
???????????InitializeComponent();
???????}
?
???????private void Form1_Load(object sender, EventArgs e)
???????{
???????????this.IsMdiContainer = true;
???????}
?
???????private void button1_Click(object sender, EventArgs e)
???????{
???????????Form2.Show1().Show();
???????}
??? }
?
?????? public partial class Form2 : Form
??? {
???????private static Form2 f;
???????private Form2()
???????{
???????????InitializeComponent();
???????}
???????publicstatic Form2 Show1()
???????{
???????????if (f == null || f.IsDisposed)
???????????{
??????????????? f = new Form2();
??????????????? f.MdiParent = Form1.ActiveForm;
???????????}
???????????return f;
???????}
?
???????private void Form2_Load(object sender, EventArgs e)
???????{
?
???????}
??? }
?
Demo2:
?????? classProgram
??? {
???????static void Main(string[] args)
???????{
???????????child c1= child.GetChild();
???????????child c2 = child.GetChild();
???????????c1.A = 5;
???????????Console.WriteLine(c2.A);
???????????Console.ReadKey();
???????}
??? }
???class child
??? {
???????private static child c;
???????private child() { }
??????? public staticchild GetChild()
???????{
???????????if (c == null)
???????????{
??????????????? c = new child();
???????????}
???????????return c;
???????}
???????private int a;
???????public int A
???????{
???????????get { return a; }
??? ????????set { a = value; }
???????}
??? }
?
Demo3:
1:
????????????? privatestatic child c;
???????private static readonly object syncRoot = newobject();//鎖
???????private child() { }
???????public static child GetChild()
???????{
???????????lock (syncRoot)
???????????{
??????????????? if (c == null)
???????????????{
??????????????????? c = new child();
??????????????? }
???????????}
???????????return c;
???????}
?
2:雙重鎖
?????? privatestatic child c;
???????private static readonly object syncRoot = new object();//鎖
???????private child() { }
???????public static child GetChild()
???????{
???????????if (c == null)
??????????? {
??????????????? lock (syncRoot)
??????????????? {
??????????????????? if (c == null)
??????????????????? {
??????????????????????? c = new child();
??????????????????? }
??????????????? }
??????????? }
???????????return c;
???????}
?
3:靜態(tài)類
????????????? sealed class child//sealed聲明靜態(tài)類,阻止派生增加實(shí)例
??? {
???????privatestatic readonly child c=new child();//第一次引用類的任何成員時創(chuàng)建實(shí)例。公共語言運(yùn)行庫負(fù)責(zé)處理變量初始化
???????private child() { }
???????public static child GetChild()
???????{
???????????returnc;
???????}
???????private int a;
???????public int A
???????{
???????????get { return a; }
???????????set { a = value; }
???????}
??? }
?
轉(zhuǎn)載于:https://www.cnblogs.com/yaoge/archive/2010/09/01/1815249.html
總結(jié)
- 上一篇: 2010世界杯主题曲夏奇拉献唱《Waka
- 下一篇: SQL 分组统计并返回当前行