设计模式-单例模式(程序中的计划生育)

故事背景

在form窗体中会有一些这种情况,这种情况就是我们没有限制被实例化的窗体原因,如果我们只是把窗体的条件修改成为 form==null,

form==null是把该窗体对象设置成为空的,但是该form还仍然存在在内存地址里。
form.IsDisposed==true是把该窗体是否为释放过的资源的属性设置为true,但form没有变化。如果你是想把form完全释放,建议使用form.Dispose()方法释放。

所以我们在限制条件时加上一个判断if (form == null || form.IsDisposed)就行了。

那么在类中的单例模式其实也加上了一个限制,使其在被实例化时只能通过自己实例化自己就行了。

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

那么直接通过代码来体现就能更好理解了

class Singleton
    {
        private static Singleton instacne;
        //重写类的构造方法使其只能自己使用,外界就无法利用new来创建此类的实例化了
        private Singleton()
        {

        }
        //本类唯一全局访问点
        public static Singleton GetInstance()
        {
            //判断此类是否已被实例化
            if (instacne ==null)
            {
                instacne = new Singleton();
            }
            return instacne;
        }
    }

客户端代码

  static void Main(string[] args)
        {
            Singleton s1 = Singleton.GetInstance();
            Singleton s2 = Singleton.GetInstance();
            


            if (s1==s2)
            {
                Console.WriteLine("两个对象是相同的实例");
            }
            Console.Read();
        }

对比下图和客户端代码,可以看到无法此类无法被实例化

这是运行以后的结果,可以看出s1与s2是相同的

猜你喜欢

转载自blog.csdn.net/pengjun_ge/article/details/113918433
今日推荐