设计模式(五)

本文总阅读量

单例模式

简单的说就是(๑•ᴗ•๑):

  • 你点一下一个按钮(比如说:帮助->关于),你再点一次的话,它不会再弹出一个窗口。
  • 类比:
    计划生育,让你只能生一个孩子。

专业一点就是(¬_¬):

  • 保证一个类仅有一个实例,并提供一个访问它的全局访问点。

Singleton

做法

  • 构造函数私有化(类外不可以调用构造函数,便不可以创建对象)
  • 有一个私有的静态的成员变量(属性),可以是指针、引用或者对象(见“饿汉”)
  • 有一个公有的函数,可以返回一个该类对象(如果有的话直接返回,如果没有则创建)

懒汉

  • 顾名思义:需要创建时才创建对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* Singleton.cpp
* 单例模式
* Created on: 2016年3月11日 下午3:38:31
* Author: Wayne 13186259527@163.com
*/


#include <iostream>

using namespace std;
/**
* 懒汉:需要创建时才创建对象
*/

class Singleton {
private:
static Singleton * instance;
Singleton() {
}
public:
static Singleton * GetInstance() {
if (instance == NULL) {
//懒汉,进入函数后判断是否创建,如果未创建则创建对象
instance = new Singleton();
}
return instance;
}

};
//这里不创建
Singleton* Singleton::instance = NULL;

int main(void) {
//懒汉
Singleton * s1 = Singleton::GetInstance();
Singleton * s2 = Singleton::GetInstance();
if (s1 == s2) {
cout << "s1 == s2" << endl;
}
return 0;
}

饿汉

  • 顾名思义:从一开始加载的时候就创建对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
* singleton2.cpp
* 单例模式 饿汉
* Created on: 2016年3月11日 下午4:24:03
* Author: Wayne 13186259527@163.com
*/


#include <iostream>
using namespace std;
class singleton {
private:
static singleton* instance;
singleton() {
}
public:
static singleton* GetInstace() {
//饿汉,直接返回已经创建好的对象
return instance;
}
};
//这里直接创建
singleton* singleton::instance = new singleton();

int main(void) {
singleton* s1 = singleton::GetInstace();
singleton* s2 = singleton::GetInstace();
if (s1 == s2) {
cout << "s1 == s2" << endl;
}
return 0;
}