单例模式

别等时光非礼了梦想. 提交于 2019-12-04 04:32:06

1、核心作用:
     保证一个类只有一个实例,并且提供一个访问改实例的全局访问点。
2、常见的应用场景:
      1、Windows的Task Manager(任务管理器)就是很典型的单例模式
      2、Windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收战一直维护者仅有的一个实例
      3、项目中,读取配置文件的类,一般也只有一个对象,没有必要每次使用配置文件数据,每次new 一个对象去读取
      4、网站的技术器,一般也是采用单例模式实现,否则难以同步
      5、应用程序的日志应用,一般都用单例模式实现,这一般是由于共享
          的日志文件一致处于打开状态,因为只能有一个实例去操作。
           否则,内容不好追加
     6、数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种
         数据库资源。
     7、操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统
        只能由一个文件系统
     8、Application  也是单例的典型应用(Servlet编程会涉及到)
    9、在Spring中,每个bean 默认就是单例的,这样做的优点是Spring容器可以管理
   10、在servlet编程中,每个Servlet 也是单例
   11、在Spring MVC框架/struts1框架中,控制器对象也是单例

3、优点

    1 、由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,
          如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久
          驻留内存的方式来解决
    2、单例模式在系统设置
全局的访问点,优化环共享资源访问,例如可以涉及一个单例类,负责所有数据表的映射处理

4、2个主要的实现

 

主要
懒汉式: (线程安全,调用效率不高,但是,可以延时加载)
1、构造器私有
2、属性static
package com.bwie;

 

public class SingletonDemo2 {
 private SingletonDemo2 (){
  
 }
 private static SingletonDemo2 s;
 //为了防止多个线程同时调用,需要这样
 public static  synchronized SingletonDemo2 getInstance(){
  if(s==null){
   s=new SingletonDemo2();
  }
  return s;
 }

 

}
 
饿汉式:(线程安全,调用效率高,但是,不能延时加载)
package com.bwie;

 

public class SingletonDmo1 {
 private static SingletonDmo1 instance=new SingletonDmo1();//类加载,天然线程安全模式
 private SingletonDmo1(){
  
 }
  public static  SingletonDmo1 getInstance(){
   return instance;
  }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!