科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Java中应用设计模式之Singleton

在Java中应用设计模式之Singleton

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

ingleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点。对一些类来说,保证只有一个实例是很重要的,

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
二、以静态变量为标志实现 Singleton
  
  在类中嵌入一个静态变量做为标志,每次都在进入构造器的时候进行检查。
  
  问题在于构造器没有返回类型,如果确定创建一个实例成功与否。一个方法是调用一个函数来检查创建是否成功,然后简单的返回一个来自静态变量的值,但是这样做是不优雅的,而且容易发生错误。比较好的做法是创建一个当创建了一个以上的实例时可以抛出异常的类,这个类仅仅是调用父类方法,好处是用了自己命名的异常类型,错误信息更加清晰:
  
  class SingletonException extends RuntimeException
  {
  public SingletonException(String s)
  {
  super(s);
  }
  }
  
  class Singleton
  {
  static boolean instance_flag = false;
  // true if 1 instance
  public Singleton()
  {
  if (instance_flag)
  throw new SingletonException
  ("Only one instance allowed");
  else
  instance_flag = true;
  // set flag for 1 instance
  }
  }
  
  // 测试类
  
  public class singletonTest
  {
  static public void main(String argv[])
  {
  Singleton s1, s2;
  // create one
  incetance--this should always work
  System。out.println
  ("Creating one instance");
  try {
  s1 = new Singleton();
  } catch (SingletonException e)
  {
  System.out.println(e.getMessage());
  }
  // try to create another
  spooler --should fail
  System.out.println
  ("Creating two instance");
  try {
  s2 = new Singleton();
  } catch (SingletonException e)
  {
  System.out.println(e.getMessage());
  }
  }
  }
  
  singletonTest运行结果是:
  
  Creating one instance
  Creating two instance
  Only one instance allowed
  
  可以看出,第一个实例顺利创建,第二个实例创建实抛出了我们自定义的异常。
  
  三、用注册器机制来创建 Singleton
  
  首先用集合中的Hashtable 和Enumeration来实现addItem(Object key, Object value),getItem(Object key),removeItem(Object key)等方法实现一个管理器,将key和value一一关联起来,客户程序员创建实例前首先用addItem方法进行注册,再用getItem方法获取实例。
  
  Hashtable中的key是唯一的,从而保证创建的实例是唯一的,具体实现限于篇幅不再细说,在Prototype模型的应用一文中我将会给出一个实现注册器的代码。用注册器机制来创建 Singleton模式的好处是易于管理,可以同时控制多个不同类型的Singleton 实例。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章