JavaScript设计模式-揭示模式

Revealing Module 揭示模式

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
揭示模式能够再私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,展示为公有方法。

var myRevealingModule = function(){
var privateVar = "blue",
publicVar = 'Hey blue''

function privateFunction() {
console.log("Name: " + privateVar );
}

function publicSetName (strName) {
privateName = strName;
}

function publicGetName() {
privateFunction();
}
// 将暴露的公有指针指向到私有函数和属性上
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
}();

myRevealingModule.setName("yellow");

如果你喜欢,该模式也可以拥有更具体命名方案的私有函数和属性:

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
var myRevealingModule = function() {
var privateCounter = 0;

function privateFunction() {
privateCounter++;
}

function publicFunction() {
publicIncrement();
}

function publicIncrement() {
privateFunction();
}

function publicGetCount() {
return privateCounter;
}

// 将暴露的公有指针指向到私有函数和属性上

return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
}
}

优点

该模式可以使得脚本语法更加一致。在模块代码的底部,它也会很容易指出那些函数和变量可以被公开访问,从而改善可读性。

缺点

如果一个私有函数引用一个公有函数,在需要打补丁时,公有函数是不能被覆盖的。