单例设计模式

通过一些程序设计模式的书籍,再结合网上各位大腿的详细分析,简单通俗的理解,单例是应用在一个程序内只允许某个类只存在一个实例的设计思想。

例如日志,对于一个程序来说,往往只需要一个日志实例。

了解单例的的应用情形,接下来对单例进行详细的设计说明

1,创建类


        public class Singleton
        {
            private int u;//定义一个变量,做测试验证
            private static Singleton uniqueInstance;//定义变量,当部调用GetInstance()时保存类的实例
            private static readonly object locker = new object();

            public void dosomething()//类外部需要访问的方法需要设为公有
            {
                u++;
                Console.WriteLine(uuu);
            }
            private Singleton()//构造函数设置为私有,外部就只能通过GetInstance()来访问类并创建实例
            {}

            public static Singleton GetInstance()//定义对外创建实例接口的方法
            {
                if (uniqueInstance == null)//进行判断
                {
                    lock (locker)//仿真多个线程同时访问出现异常情况,当有一个线程访问,则锁住,其他线程暂时挂起。
                    {
                        if (uniqueInstance == null)
                        {
                            uniqueInstance = new Singleton(); //创建实例
                        }
                    }
                }
                return uniqueInstance;//返回实例
            }
        }

2,其他类调用


    class Program
    {
        static void Main(string[] args)
        {
            Singleton u1 = Singleton.GetInstance();//创建实例1
            Singleton u2 = Singleton.GetInstance();//创建实例2
            Console.WriteLine(u1 == u2);//判断实例1是否等于实例2
            u1.dosomething();//调用实例方法
            u2.dosomething();//调用实例方法
            Console.ReadKey();
        }
    }

3,输出结果

true

1

2


 

总结:从输出结果看,u1等于u2,实例变量u在u1,u2调用的函数累加产生叠加的变化,证明u1和u2是同一个实例




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值