`
galo
  • 浏览: 36718 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java设计模式(单例模式)

阅读更多
  单例模式是一种特殊的工厂方法模式,它适用于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统。典型的情况是,那些对象的实例能够被整个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在不再需要任何多于一个的实例的情况下出现。
  通过单例模式你可以:
  ●确保一个类只有一个实例被建立。
  ●提供了一个对对象的全局访问指针。
  ●在不能影响单例类的客户端的情况下允许将来有多个实例。
  单例模式的实例在全局中有且只有一个,并且该实例必须由自身创建,不能够被克隆。为了满足这些要求,一个标准的单例模式需要包含如下4个要素:
  (1)拥有一个私有的静态实例,该实例禁止外部访问。
  (2)拥有私有的默认构造函数,防止使用构造函数进行实例化。
  (3)拥有一个静态工厂方法,并且必须是同步的,防止多线程环境同时执行。
  (4)重写clone()函数,并返回当前实例对象,默认的clone()函数会创建新的实例。

  根据以上4点要求,完成的标准单例模式代码如下:
public class SingletonFactory{

  //(1)私有的防止外部引用
  private static SingletonFactory _instance = null;
  //(2)私有的默认构造函数,防止使用构造函数进行实例化
  private SingletonFactory(){}
  //(3)单例静态工厂方法,同步防止多线程环境同时执行
  synchronized public static SingletonFactory getInstance(){

    if(_instance == null){

      _instance = new SingletonFactory();
    }
    return _instance;
  }
  //(4)重写clone()函数,默认的该函数会创建新的实例
  public SingletonFactory clone(){
  
    return getInstance();
  }
}


  使用单例模式有一个前提条件:就是在一个系统中某一个类的实例必须只有一个,如果可以有多个实例存在,就不能够使用单例模式。以上的说法比较抽象,具体的可以应用在如下场景:
  ●系统的全局变量,存储区域
  ●系统的全局配置文件
  ●系统的全局操作函数
  由此可见,只要希望在全局使用一个统一的对象,就可以使用单例模式。

  java中的应用----日历单例类Calendar.
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics