懒羊学习《深入浅出设计模式》C#代码手札之单件模式

       单件模式:确保一个类只有一个实例,并提供一个全局访问点。
这个模式的定义说得很明白,就是这个类只有一个实例,也就是通过一个“开关”来控制,如果这个类的实例存在,那就不在生成了,当然不存在,那就继续了。关于这个模式网上有许多相关的讲解,有兴趣的可以到TerryLee的博客去看看,可谓讲得很详细,而且写了很多种情况。我比较喜欢看到直观化的东西,因此我在写这个代码的时候相对性去看看显示结果。我在生成实例的时候,将生成时间赋给当前变量,并且通过进程thread来拖延时间再次运行,再次生成实例,如果只能生成一个实例,那么这两个实例的生成时间是一致的,否则就会相差一段时间。在本例中还特地将单件与非单件进行比较,最终得出的结果是完成正确的。如下:
public sealed class singleton
    {
        static singleton instance = null;
        static readonly object padlock = new object();
        public static string Time;
 
        public static string Timex;
        static singleton instancex = null;
 
      singleton()
        { }
 
        public static singleton Instance
        {
            get {
 
 
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new singleton();
                        Time = DateTime.Now.ToString();
                    }
 
                 return instance;
                }
              
            }
        }
 
 
/// // 非单件测试
 
        public static singleton Instancex
        {
            get
            {
 
                        instancex = new singleton();
                        Timex = DateTime.Now.ToString();
                        return instancex;
 
            }
        }
 
 
 
        public string getDescribex()
        {
            return Timex;
 
        }
 
 
        public string getDescribe()
        {
            return Time;
       
        }
 
    }
 
调用代码:
singleton s = singleton.Instance; // 单件模式测试
            this.label1.Text = s.getDescribe();
 
            Thread.Sleep(3000);
 
 
            singleton s1 = singleton.Instance;
            this.label1.Text += s1.getDescribe();
 
 
 
            singleton s2 = singleton.Instancex; // 非单件模式测试
            this.label1.Text += "||" + s2.getDescribex();
            Thread.Sleep(3000);
            singleton s3 = singleton.Instancex;
            this.label1.Text += "||" + s3.getDescribex();

单件模式并不是传统的通过构造函数去完成,而是通过属性去完成,当实例具体的去调用这个属性时开始检测并产生实例。 

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值