学习设计模式,自然从最简单的模式入手,而最简单的模式便是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.{
相关报道:
- 《星球大战:前线》全新演示:刺激的步行者攻击模式2015-09-14
- 《星球大战:前线》新模式Blast:星战版团队死亡竞赛2015-07-31
- 芒果TV模式能否被传统电视台复制?2015-01-05
- Twitter并未衰亡 亟需开辟新模式拓展收入和用户2014-05-06
- 学习娱乐两不误 高性价比影音本推荐2014-03-17
本类最新
本类最热
科技视界
要闻推荐
今日视点
热点专题
新闻图片
- 新闻排行
- 评测排行