学习设计模式,自然从最简单的模式入手,而最简单的模式便是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
从此便踏上征途,也许会孤独一程。