首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 认证考试 > JAVA认证 >

在Java中应用设计模式Singleton(2)

2009-05-13 
本文简要介绍了一种创建性模型Singleton。


  19   throw new SingletonException("Only one instance allowed");

  20

  21   else

  22

  23   instance_flag = true; // set flag for 1 instance

  24

  25   }

  26

  27   }

  28

  29   // 测试类

  30

  31   public class singletonTest {

  32

  33   static public void main(String argv[]) {

  34

  35   Singleton s1, s2;

  36

  37   // create one incetance--this should always work

  38

  39   System.out.println("Creating one instance");

  40

  41   try {

  42

  43   s1 = new Singleton();

  44

  45   } catch (SingletonException e) {

  46

  47   System.out.println(e.getMessage());

  48

  49   }

  50

  51   // try to create another spooler --should fail

  52

  53   System.out.println("Creating two instance");

  54

  55   try {

  56

  57   s2 = new Singleton();

  58

  59   } catch (SingletonException e) {

  60

  61   System.out.println(e.getMessage());

  62

  63   }

  64

  65   }

  66

  67   }

  68

  69

  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 实例.

  小结

  Singleton模式可以方便的进行扩充,产生指定数目的实例.

  在The Design Patterns Java Companion 一书中曾提到过用静态类的方式来实现 Singleton模式,并指出java.lang.Math就是一个例子,这里我并不表示赞同,因为Math并不是一个真正的对象,我们只是直接调用 Math类所包装的静态方法而已,根本就没有创建实例的过程,又从何说起只产生一个实例呢?这个问题我曾到Javaranch的论坛上发过帖子,所有回帖的人也都是对这一观点持否定态度.

  在多线程的程序中,singleton可能会变的不可靠,可能会出现多个实例,解决的办法很简单,加个同步修饰符: public static synchronized Singleton getInstance(). 这样就保证了线程的安全性.

  最后要说的是大家可能会看见一些其他实现Singleton模式的方法,因为模式在具体的应用时是灵活的,不是一成不变的,并没有一个固定的做法,但大都是上面几种方法的变形.

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行