zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式有一下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

      在我的工作过程中,我发现所有可以使用单例模式的类都有一个共性,那就是这个类没有自己的状态,换句话说,这些类无论你实例化多少个,其实都是一样的,而且更重要的一点是,这个类如果有两个或者两个以上的实例的话,我的程序竟然会产生程序错误或者与现实相违背的逻辑错误。

       这样的话,如果我们不将这个类控制成单例的结构,应用中就会存在很多一模一样的类实例,这会非常浪费系统的内存资源,而且容易导致错误甚至一定会产生错误,所以我们单例模式所期待的目标或者说使用它的目的,是为了尽可能的节约内存空间,减少无谓的GC消耗,并且使应用可以正常运作。

         我稍微总结一下,一般一个类能否做成单例,最容易区别的地方就在于,这些类,在应用中如果有两个或者两个以上的实例会引起错误,又或者我换句话说,就是这些类,在整个应用中,同一时刻,有且只能有一种状态。

    主要讲解两种单例模式,1.懒汉模式2.饿汉模式

    懒汉和饿汉的区别:

    懒汉:在初始化类的时候,不创建唯一的实例,而是等到真正需要用到的时候才创建。必须加上同步,否则有可能依然创建多个实例。
    饿汉:在初始化的时候,就创建了唯一的实例,不管是否需要用到。不需要自己加同步,一定产生唯一的实例。

    1.懒汉模式

     public  class Singleton
        {
            //私有化构造函数
            private Singleton()
            {
    
            }
            //私有化对象
            private static Singleton leton;
    
            static object obj = new object();
    
            //接口方法
            public static Singleton Instance()
            {
              //双重加锁
                if (leton == null)
                {
                    //解决并发
                    lock (obj)
                    {
                        if (leton == null)
                        {
                            return leton = new Singleton();
                        }
                    
                    }
                }
            
                    return leton;
              
               
    
            }
    
            //方法提示
            public void Result()
            {
                Console.WriteLine("懒汉模式");
            }
    
        }
    

    2.饿汉模式

     public class EHan
        {
    //私有构造函数
    private EHan() { }
    //创建实例
    private static EHan eHan = new EHan(); public static EHan Instance() {
    //返回实例
    return eHan; } public void Result() { Console.Write("饿汉模式"); } }
  • 相关阅读:
    bzoj3946
    bzoj3065
    bzoj1500
    bzoj1233
    bzoj1089
    bzoj1087
    bzoj1086
    if语句之猜拳
    if语句判断闰年、平年
    if语句判断身高体重是否标准
  • 原文地址:https://www.cnblogs.com/gbb44/p/10638794.html
Copyright © 2011-2022 走看看