c# 设计模式:单例模式

来源:互联网 发布:java中类的生命周期 编辑:程序博客网 时间:2024/05/22 14:38

今天来简单来说一下单例模式:它要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

比如我们登录一个系统的时候要记录一个员工的信息,在整个系统运行过程中可能要不段的访问这个员工的信息,

一般情况下我们会有两种做法,第一种建一个静态类,第二种就是今天我要说的键一个单例类

今天只说单例类,建单例类要有几个要求

1.私有的构造方法

2.指向自己实例的私有静态引用

3.以自己为实例为返回值的静态方法

单例模式实例化对象有两种方式

1.懒汉模式:调用取得实例方法的时候才去实例化对象

?
public class singleClassDemo
  {
      private static singleClassDemo singleC;
 
      private singleClassDemo()
      {
      }
 
      private static singleClassDemo InitSingle()
      {
          if (singleC == null)
              singleC = new singleClassDemo();
 
          return singleC;
      }
  }

2.饿汉模式:单例类被加载时候实例化对象

?
public class singleClassDemo
{
    private static singleClassDemo singleC = new singleClassDemo();
 
    private singleClassDemo()
    {
    }
 
    private static singleClassDemo InitSingle()
    {
        return singleC;
    }   
}

 做一个小例子:保存员工的名字和ID

?
public class Program
    {
        static void Main(string[] args)
        {
            singleClass s1 = singleClass.getSingleClass();
            singleClass s2 = singleClass.getSingleClass();   //已经实例化过一次了不会再实例化了       
             
 
            Console.ReadLine();
        }
    }
    public class singleClass
    {
        private static singleClass singleC = new singleClass();
        private singleClass()// 在整个程序运行过程中只实例化一次
        {
            id = "001";
            name = "ERP";
            Console.WriteLine("singleClass run");
        }
        public static singleClass getSingleClass()
        {           
            return singleC;
        }
 
        private static string id;
        public static string ID
        {
            get
            {
                return id;
            }
        }
 
        private static string name;
        public static string Name
        {
            get
            {
                return name;
            }
        }
    }

<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击