单例模式 singleton

来源:互联网 发布:新疆2016年6月4g网络 编辑:程序博客网 时间:2024/06/04 08:47

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

  单例模式(singleton)顾名思义,就是只有一个实例。  作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。  单例模式的要点  显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

在java中,可以使用以下这种方式使用单例模式创建类的实例:  public class MyBean {
  private static MyBean instance = null;
  private MyBean(){  //do something  }//构造函数设置 private  ,不允许外部new
  public static synchronized MyBean getInstance(){
  if(instance == null){
  instance = new MyBean();
  }
  return instance;
  }
  }
  当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存。本人对这个说法持保留态度。只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由。我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?  Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。  一般Singleton模式通常有两种形式:  第一种形式: 也是常用的形式。  public class Singleton {  private static Singleton instance = null;  private Singleton(){  //do something  }  public static Singleton getInstance(){  if(instance==null){  instance = new Singleton();  }  return instance;  }  } //这个方法比下面的有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率  第二种形式:  public class Singleton {  //在自己内部定义自己的一个实例,只供内部调用  private static Singleton instance = new Singleton();  private Singleton(){  //do something  }  //这里提供了一个供外部访问本class的静态方法,可以直接访问  public static Singleton getInstance(){  return instance;  }  }


原创粉丝点击