C# 基础(十五)C#单例模式的应用举例

一、简介

上一篇博客,主要介绍了单例模式的相关理论,但是却没有过多的应用,本博客将主要介绍单例模式的应用:

C# 基础(十四)C#单例模式:首先介绍 单线程、多线程、加锁 单例模式。然后介绍单例模式的线程同步:多线程有序访问共享内存。

二、单例模式的应用

1、好了,以上问题虽然讨论的单例模式的相关理论,但是却么有怎么应用。现在,我把单例模式应用起来。建立C#控制台程序,我用到了三个类:

2、不多说了,现在直接把程序附上,自己慢慢调试,可以注释掉方法2/3,剩下方法1,看看效果。

也可以全部保留全部的方法,然后单部执行,你会发现只有方法1进行了实例化,方法2/3就不会进行实例化了。

Program.cs

#region 单实例类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace test
{
    class Program
    {

        static void Main(string[] args)
        {
            //方法1:中间类ClassB调用了单实例类Singleton,通过实例化中间类ClassB。
            ClassB classb = new ClassB();
            classb.methodB();


            //方法2:直接实例化Singleton。
            Singleton singleton = Singleton.GetInstance();
            Console.WriteLine(singleton.iGlobalNum1);

            //方法3:调用方法GetSingleton()来实例化Singleton。
            GetSingleton();
            Console.ReadLine();
        }

        static private void GetSingleton()
        {
            Singleton singleton = Singleton.GetInstance();
            Console.WriteLine(singleton.bGlobalStatus1);
        }
    }
}
#endregion

ClassB.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using test;
namespace test
{
    class ClassB
    {
        Singleton singleton = Singleton.GetInstance();
        public void methodB()
        { 
            Console.WriteLine(singleton.iGlobalNum1);
            //iGlobalNum2字段,是私有的,故不能被访问。
            //Console.WriteLine(singleton.iGlobalNum2);
            Console.WriteLine(singleton.bGlobalStatus1);
        }
    }
}

Singleton.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    public class Singleton
    {
        public int iGlobalNum1;
        private int iGlobalNum2;
        public bool bGlobalStatus1;

        // 定义一个静态变量来保存类的实例
        private volatile static Singleton uniqueInstance;

        // 定义私有构造函数,使外界不能创建该类实例
        private Singleton()
        {
            iGlobalNum1 = 11;
            iGlobalNum2 = 22;
            bGlobalStatus1 = false;
        }

        /// <summary>
        /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            // 如果类的实例不存在则创建,否则直接返回
            if (uniqueInstance == null)
            {
                uniqueInstance = new Singleton();
            }
            return uniqueInstance;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/xpj8888/article/details/85756991