《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模式创建的模块更加脆弱,所以在使用时应该特别小心。

相关文章
|
11月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
315 16
|
11月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
316 0
|
11月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
429 0
|
11月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
265 0
|
11月前
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。
|
11月前
|
设计模式 Prometheus 监控
并发设计模式实战系列(20):扇出/扇入模式(Fan-Out/Fan-In)(完结篇)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第二十章,废话不多说直接开始~
356 0
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
设计模式 JavaScript 前端开发
|
设计模式 JavaScript 前端开发
|
设计模式 JavaScript 前端开发
【javascript设计模式】2.Module(模块)模式
【javascript设计模式】2.Module(模块)模式
290 0