首页 > 应用软件 > 软件教程 > 编程开发 > 正文

Java认证考试:关于Singleton模式的学习
2011-06-20 15:33      我要评论()
字号:T|T

学习设计模式,自然从最简单的模式入手,而最简单的模式便是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.{

 

新闻热线:010-68947455

关键词: 认证考试 模式 学习

责任编辑:lujq

我要评论

已有位网友参与评论

本类最热

科技视界

网站地图

牛华网

华军下载 | 牛华网 | 盒子 | pcsoft | 论坛

实用工具

关于我们 | 新闻投稿 | 软件发布 | 版权声明 | 意见建议 | 网站地图 | 友情连接 | RSS订阅 | 总编信箱 | 诚聘英才 | 联系我们

苏ICP备11016551号-2  苏公网安备 32132202000111号 本站特聘法律顾问:于国富律师

Copyright (C) 1997-2012 newhua.com 牛华网 版权所有