〖JAVE经验〗Java认证考试:关于Singleton模式的学习

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

更多免费相关学习经验请访问:Tore_m_1206686_21115_1_1.html”>http://www.shangxueba.com/sTore_m_1206686_21115_1_1.html

从此便踏上征途,也许会孤独一程。

〖JAVE经验〗Java认证考试:关于Singleton模式的学习

相关文章:

你感兴趣的文章:

标签云: