zoukankan      html  css  js  c++  java
  • 二十三.单例模式

    单例模式:

           保证一个类仅有一个实例,并提供一个访问它的全局访问点。

           类自身负责保存它的唯一实例。

    注意:多线程

           使用锁,或C#静态类——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:静态类

                  sealed class child//sealed声明静态类,阻止派生增加实例

        {

           privatestatic readonly child c=new child();//第一次引用类的任何成员时创建实例。公共语言运行库负责处理变量初始化

           private child() { }

           public static child GetChild()

           {

               returnc;

           }

           private int a;

           public int A

           {

               get { return a; }

               set { a = value; }

           }

        }

  • 相关阅读:
    SqlDependency和SqlCacheDependency的若干说明
    sublime 3 随笔
    [有得]解决redmine写操作很慢的问题
    Java双重循环
    使用 Docker 打包 Rust Web 服务
    Centos8.3、hadoop-2.6.4 简单的日志分析实验
    广域网数据交换的三种方式
    计算机的起源与发展
    推荐两款生成数据库表结构说明文档工具
    Centos8.3、docker部署springboot项目实战记录
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815249.html
Copyright © 2011-2022 走看看