美文网首页
单例(Singleton)

单例(Singleton)

作者: weft | 来源:发表于2016-09-02 11:02 被阅读0次

    单例的目的:保证一个类只有单一的实例,也就是说你无法通过new来创建这个类的一个新实例。

    单例的好处:当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象。

    Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。

    第一种:在声明变量时实例化(也叫饿汉式
    单例模式),代码如下:

    public class Singleton {
          private static Singleton instance = new Singleton(); //已经自行实例化
    
          private Singleton(){}  //私有的默认构造
    
      public static Singleton getInstance() { //静态工厂方法
    
           return instance;  
       } 
     } 
    

    第二种:把对象的创建放到方法里面去(也叫懒汉式
    单例模式),代码如下:

     public class Singleton { 
      private static Singleton instance = null;
            private Singleton(){}
      public static synchronized Singleton getInstance() {
           //也可以这样写:synchronized public static Singleton getInstance() {
    
          if (instance == null){
           instance = new Singleton();
               }
               return instance; 
         } 
    } 
    

    各自的优缺点:
    第一种饿汉式:
    优点:在类加载初始化的时候就创建对象,调用getInstance的时候,没有同步方法,运行时性能较高。
    缺点:类加载速度慢,占用太多大的资源空间。
    第二种懒汉式:
    优点:避免了第一种方式的缺点, 同时,可以在多线程下运行安全。
    缺点:因为他使用了锁,在运行中效率慢。

    相关文章

      网友评论

          本文标题:单例(Singleton)

          本文链接:https://www.haomeiwen.com/subject/uibhettx.html