跳到主要内容

模块模式(Module Pattern)

模块模式(Module Pattern)是一种用于封装代码的设计模式,通常用于 JavaScript。它允许你将相关的变量和函数封装在一个单一的模块中,提供了一种机制来避免全局命名空间的污染,同时使代码更加模块化和可维护。模块模式是一种常见的模块化编程方式,有助于创建独立、可复用的代码单元。

模块模式的关键特点包括:

私有变量和函数:模块模式允许将变量和函数封装在模块内部,从而限制它们的可见性,使它们成为模块的私有成员。

公共接口:模块模式通常会返回一个公共接口,这个接口包含可以被外部代码访问的方法和属性。这些方法和属性允许外部代码与模块进行交互。

场景

封装代码:当需要将相关的变量和函数封装在一个独立的单元中时,模块模式非常有用。

避免全局污染:模块模式可以帮助避免将变量和函数添加到全局命名空间,从而减少命名冲突和代码耦合。

实现单例模式:模块模式可以用于实现单例模式,确保只有一个实例可供访问。

实现

const ShoppingCartModule = (function () {
// 私有变量
let cart = [];

// 私有函数
function calculateTotal() {
return cart.reduce((total, item) => total + item.price, 0);
}

// 公共接口
return {
addItem: function (item) {
cart.push(item);
},
removeItem: function (index) {
if (index >= 0 && index < cart.length) {
cart.splice(index, 1);
}
},
getCart: function () {
return cart;
},
getTotal: function () {
return calculateTotal();
},
};
})();

// 客户端代码
ShoppingCartModule.addItem({ name: "Item 1", price: 50 });
ShoppingCartModule.addItem({ name: "Item 2", price: 30 });
console.log("Cart:", ShoppingCartModule.getCart());
console.log("Total:", ShoppingCartModule.getTotal());

ShoppingCartModule.removeItem(1);
console.log("Updated Cart:", ShoppingCartModule.getCart());
console.log("Updated Total:", ShoppingCartModule.getTotal());

在上面的示例中,我们使用立即调用函数表达式(IIFE)创建了一个购物车模块 ShoppingCartModule。模块内部包含了私有变量 cart 和私有函数 calculateTotal。公共接口包括 addItem、removeItem、getCart 和 getTotal 方法,允许客户端代码与购物车模块交互。

模块模式有助于将相关的功能封装在一个单元中,同时保护模块内部的状态和逻辑。这有助于提高代码的可维护性,并减少全局命名空间的污染。