设计模式之单例模式

单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

模式作用:

  1. 模块间通信
  2. 系统中某个类的对象只能存在一个
  3. 保护自己的属性和方法

注意事项:

  1. 注意this的使用

例子:

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
// 1.独立的对象 建2个 一个xiaowang 一个xiaoli
// 2.让xiaoli跟xiaowang通过门铃互相通信
// 3.先看一下小wang家有没有门,如果没有门直接通过门铃通讯dididi,如果没有先建门
// 4.两个单例之间开始通信
var xiaowang=(function(argument){
var xiaowangjia=function(message){
this.menling=message;
}
var men;
var info={
sendMessage:function(message){
if(!men){
men=new xiaowangjia(message);
}
return men;
}
}
return info;
})()
var xiaoli={
callXiaoming:function(msg){
var _xw=xiaowang.sendMessage(msg);
console.log(_xw.menling);
_xw=null;
}
}
xiaoli.callXiaoming("dididi") //dididi

例子二

页面中有若干按钮,如果用$('#id').click(function(){ }),如果逻辑特别多会很乱,数据间通信困难,改用单例模式如下:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单例模式</title>
<script src="http://cdn.bootcss.com/jquery/3.0.0-alpha1/jquery.min.js"></script>
</head>
<body>
<button id="a">a</button>
<button id="d">d</button>
<script>
$(function() {
var top = {
init: function() {
this.render();
this.bind();
},
a: 4,
render: function() {
var me = this;
me.btna = $("#a");
},
bind: function() {
var me = this;
me.btna.click(function() {
me.test()
})
},
test: function() {
a = 5;
console.log(a)
}
}
var banner = {
init: function() {
this.render();
this.bind();
},
a: 4,
render: function() {
var me = this;
me.btnd = $("#d");
},
bind: function() {
var me = this;
me.btna.click(function() {
me.test()
})
},
test: function() {
top.a = 6;
console.log(top.a)
}
}
top.init();
banner.init();
})
</script>
</body>
</html>