单例模式

============1单例模式==============

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

 

namespace ConsoleApplication13

{

    class Program

    {

        static void Main(string[] args)

        {

            for (int i = 0; i < 1000; i++)

            {

                Thread t = new Thread(new ThreadStart(() =>

                {

                    Singleton s = Singleton.GetInstance();

                }));

                t.Start();

            }

            Console.WriteLine("ok");

            Console.ReadKey();

 

        }

    }

 

    public class Singleton

    {

        private Singleton()

        {

            //只要输出一次.就证明创建了一个对象。

            Console.WriteLine(" . ");

        }

        private static Singleton _instance;

        private static readonly object _syn = new object();

        public static Singleton GetInstance()

        {

            //每次都锁定降低性能,所以只有为空值时才锁定。

            if (_instance == null)

            {

                lock (_syn)

                {

                    //为了防止在第一次判断_instance==null后,在锁定之前_instance又被赋值,所以锁定之后一定要再判断一次是否已经创建了对象。

                    if (_instance == null)

                    {

                        _instance = new Singleton();

                    }

                }

 

            }

            return _instance;

 

        }

    }

}

=============================2单例模式(另一种写法)==========================

 public sealed class Singleton2

    {

        private Singleton2()

        {

            Console.WriteLine(".");

        }

        //静态成员初始化,只在第一次使用的时候初始化一次。

        private static readonly Singleton2 _instance = new Singleton2();

 

        public static Singleton2 GetInstance()

        {

            return _instance;

        }

    }

=================测试====================

  for (int i = 0; i < 1000; i++)

            {

                Thread t = new Thread(new ThreadStart(() =>

                {

                    Singleton2 s = Singleton2.GetInstance();

                }));

                t.Start();

            }

            Console.WriteLine("ok");

            Console.ReadKey();

//======================实现窗口类(Form)的单例模式===============

public partial class Form2 : Form

    {

        private Form2()

        {

            InitializeComponent();

        }

        private static Form2 f2;

        private static readonly object syn = new object();

        public static Form2 GetForm2()

        {

            if (f2 == null || f2.IsDisposed)

            {

                lock (syn)

                {

                    if (f2 == null || f2.IsDisposed)

                    {

                        f2 = new Form2();

                    }

                }

               

            }

            return f2;

        }

    }

posted @ 2015-05-27 20:36  _lu  阅读(131)  评论(0编辑  收藏  举报