《JavaScript设计模式》——9.3 Revealing Module(揭示模块)模式

简介:

本节书摘来自异步社区《JavaScript设计模式》一书中的第9章,第9.3节, 作者: 【美】Addy Osmani 译者: 徐涛 更多章节内容可以访问云栖社区“异步社区”公众号查看。

9.3 Revealing Module(揭示模块)模式

现在对Module模式应该更加熟悉了,让我们来看一个稍有改进的版本—Christian Heilmann的Revealing Module模式。

Revealing Module模式的产生是因为Heilmann很不满意这种状况:当他想从另一个方法调用一个公有方法或访问公有变量时,必须要重复主对象的名称。他也不喜欢使用Module模式时,必须要切换到对象字面量表示法来让某种方法变成公有方法。

他努力的结果就是创建了一个更新的模式,能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,该函数是他希望展示为公有的方法。

有关如何使用Revealing Module模式的示例如下所示:

var myRevealingModule = function () {
   var privateVar = "Ben Cherry",
     publicVar = "Hey there!";
function privateFunction() {
        console.log("Name:" + privateVar);
    }
function publicSetName(strName) {
        privateName = strName;
    }
    function publicGetName() {
        privateFunction();
    }
// 将暴露的公有指针指向到私有函数和属性上
return {
        setName: publicSetName,
        greeting: publicVar,
        getName: publicGetName
    };
}();
myRevealingModule.setName("Paul Kinlan");

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

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
    };
}();
myRevealingModule.start();

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

9.3.2 缺点
该模式的一个缺点是:如果一个私有函数引用一个公有函数,在需要打补丁时,公有函数是不能被覆盖的。这是因为私有函数将继续引用私有实现,该模式并不适用于公有成员,只适用于函数。

引用私有变量的公有对象成员也遵守无补丁规则。

正因为如此,采用Revealing Module模式创建的模块可能比那些采用原始Module模式创建的模块更加脆弱,所以在使用时应该特别小心。

相关文章
|
17天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
19 0
|
1月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
14天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
2天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
2天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
4天前
|
设计模式
设计模式(一)简单工厂模式
设计模式(一)简单工厂模式
13 0
|
14天前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
29天前
11_nest.js模块
11_nest.js模块
24 0
|
设计模式 JavaScript 前端开发
模式(一)javascript设计模式
模式(一)javascript设计模式
|
JavaScript 前端开发 设计模式
模式(一)javascript设计模式
模式有三种:Architectural Pattern、Design Pattern、Coding Pattern,即:框架模式、设计模式、编程模式。本文主要讲解javascript中的设计模式,好的设计模式能够提高代码的重用性,可读性,使代码更容易的维护和扩展。
743 0