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; }

           }

        }

  • 相关阅读:
    【转】在Ubuntu上下载、编译和安装Android最新源代码
    【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
    linux kernel API and google android compile guide
    【转】如何单独编译Android源代码中的模块--不错
    【转】Android源代码编译命令m/mm/mmm/make分析--不错
    【转】linux设备驱动之MMC SD卡——核心层简单分析
    DELL笔记本拆机添加内存条
    【转】windows7 64位系统认不出8g内存显示只有3G可用
    matlab 神经网络工具箱的实用
    学习算法收敛条件的判断
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815249.html
Copyright © 2011-2022 走看看