c/c++开发分享简单总结单例模式的4种写法

一、单例模式属于创建者模式的一种, 单例模式的目的是使该类只有一个实例,同一个类的不同对象有不同的hashcode()单例模式是由该类自行创建唯一个向外暴露的全局的对象二、写法 饿汉式:无线程安


一、单例模式

属于创建者模式的一种, 单例模式的目的是使该类只有一个实例,同一个类的不同对象有不同的hashcode()

单例模式是由该类自行创建唯一个向外暴露的全局的对象

二、写法

  • 饿汉式:无线程安全,但是类以加载就会创建实例,浪费资源
  • 懒汉式:存在线程安全,需要加synchroined
  • 内部类:无线程安全(完美方案)
  • 枚举: 线程安全,听说是高效java推荐的写法

三、饿汉式

%ignore_pre_1%

简单总结单例模式的4种写法

四、懒汉式

  //懒汉式的线程安全的写法又称为双检索懒汉模式  public class singletest {      public static void main(string[] args) {          for(int i = 0;i < 10; i++){              new thread(new runnable() {                  @override                  public void run() {                      system.out.println(single.getinstance().hashcode());                  }              }).start();          }      }  }    class single{      private static single instance = null;      single(){}      public static single getinstance(){        if (instance == null){            synchronized (single.class) {                if(instance == null){                    try{                       thread.sleep(1);                    }catch (exception e){                       e.printstacktrace();                    }                   instance = new single();                }            }        }        return instance;      }  }  

简单总结单例模式的4种写法

五、内部类

  /**   * 静态内部类:完美写法   */  public class singletest {      public static void main(string[] args) {          single single1 = single.getinstance();          single single2 = single.getinstance();          system.out.println(single1.hashcode());          system.out.println(single2.hashcode());          system.out.println(single1 == single2);      }  }    class single{      private static single instance;        public static single getinstance(){          return innersingle.instance;      }        private static class innersingle{          private final static single instance = new single();      }  }  

简单总结单例模式的4种写法

六、枚举

  //枚举:完美写法  public class singletest {      public static void main(string[] args) {          single single1 = single.instance;          single single2 = single.instance;          system.out.println(single1.hashcode());          system.out.println(single2.hashcode());          system.out.println(single1 == single2);      }  }    enum single{      instance;  }  

简单总结单例模式的4种写法

七、结论

优点:

  • 单例模式可以保证内存里只有一个实例,减少了内存的开销。
  • 避免对资源的多重占用
  • 单例模式设置全局访问点,可以优化和共享资源的访问。

缺点:

  • 没有接口,扩展不了代码,违背了开闭原则
  • 单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。

到此这篇关于简单总结单例模式的4种写法的文章就介绍到这了,更多相关单例模式的4种写法内容请搜索<猴子技术宅>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<猴子技术宅>!

需要了解更多c/c++开发分享简单总结单例模式的4种写法,都可以关注C/C++技术分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/636267.html

发表评论

邮箱地址不会被公开。 必填项已用*标注