设计模式之单例模式

  单例模式(Singleton Pattern),顾名思义,就是一个类只有一个实例,并且对整个系统提供这个实例
 
demo1:
 
public class Singleton {
    private static final Singleton singleton = new Singleton();
    //限制产生多个对象
    private Singleton(){
    }
    //通过该方法获得实例对象
    public static Singleton getSingleton(){
        return singleton;
    }
    //类中其他方法,尽量是static
    public static void doSomething(){
    }
}
        

有时会把demo1称为饿汉式单例,还有一种是懒汉式单例,也就是需要的时候才创建,仅且只有一个实例,代码如下

demo2:

public class Singleton {
      private static final Singleton singleton =null;
      private Singleton(){
      }
     //获得对象
     public static Singleton getSingleton(){
         if(singleton == null){
           singleton = new Singleton();
           }
      return singleton  ;
  }

}

 

应该能看出来demo1与demo2的区别,应该也能看出来demo2存在着线程安全的问题,因此对demo2进一步完善,可以加上Synchronized在方法上,或者在代码块上进行同步安全,代码如下:

public class Singleton {
      private static final Singleton singleton =null;
      private Singleton(){
      }
     //获得对象
     public static  synchronized Singleton getSingleton(){
         if(singleton == null){
           singleton = new Singleton();
           }
      return singleton  ;
  }

}

 
单例模式的好处:
  1,减少内存的开销
  2,减少性能的开销
  3,避免对资源的多重占用
  4,单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理
 
缺点:
  1,没有接口,扩展性难
  2,违反单一职责原则
  3,测试时候需要等对象创建完成
 
使用场景:
  一个类只有一个对象,对于系统中要求也是
  1,要求生成唯一序列号的环境,
  2,在整个项目中需要一个共享访问点或共享数据。单例则共享对象,可以做到数据的共享,但是要保证线程的安全问题
  3,当创建的对象消耗太大时,可以使用单例模式
  4,系统中使用的是大量的静态的资源的时候可以使用单例
 
 
                                            谢谢大家 ^_^
原文地址:https://www.cnblogs.com/gdhzdbh/p/9466656.html