Java认证考试:关于Singleton模式的学习(第1页)
文章来源: 更新时间:2011/6/18 捷迅软件网
  学习设计模式,自然从最简单的模式入手,而最简单的模式便是Singleton。所以第一篇就来所以说Singleton模式。看完GOF和Design patterns in Java的书,感觉Singleton虽然简单,但是想写出一个好的Singleton也不是一上来就能写出来的。
  Singleton模式的用处自然是保证一个类只有一个唯一的实例。在建模中涉及到的只能有一个对象,例如Struts中的Action类就是一例。除此之外,Singleton还使得该对象只有一个全局访问点。这就是SIngleton的作用。
  说得比较抽象,我们来看一个简单Singleton的C++和Java的代码:
  C++ Singleton模式:
  类定义:
  1.class Singleton
  2.{
  3.public:
  4.    static Singleton * Instance();
  5.    ~Singleton();
  6.
  7.private:
  8.    Singleton();
  9.
  10.    static Singleton * instance;
  11.};
  方法实现:
  12.Singleton * Singleton::instance = 0;
  13.
  14.Singleton::Singleton()
  15.{
  16.
  17.}
  18.
  19.Singleton::~Singleton()
  20.{
  21.
  22.}
  23.
  24.Singleton * Singleton::Instance()
  25.{
  26.    if (instance == 0) {
  27.        instance = new Singleton();
  28.    }
  29.
  30.    return instance;
  31.}
  Java Singleton模式:
  32.public class Singleton {
  33.
  34.    private static Singleton instance;
  35.
  36.    public static Singleton getInstance() {
  37.        if (instance == null)
  38.            instance = new Singleton();
  39.
  40.        return instance;
  41.    }
  42.
  43.    /** *//** Creates a new instance of Singleton */
  44.    private Singleton() {
  45.    }
  46.}
  通过上面的例子可以看出,Singleton的实现并不难,只要将构造函数访问域设为私有,然后添加一个静态引用和一个获得该应用的静态方法即可。其实在C++中定义一个全局静态变量也可以达到这个效果,但是像Java这样的语言就是能使用Singleton了。
  上面的程序有一个问题,就是只能运行在单线程的环境下。为此我在C++上作了个实验。首先#include 。在SIngleton::Instance()函数中增加一个Sleep(1000),程序如下:
  47.Singleton * Singleton::Instance()
  48.{

[1] [2] [3] 下一页

资讯录入:海洋    责任编辑:海洋 
数据载入中,请稍后……