javascript 设计模式之单体模式 面向对象学习基础

yizhihongxing

JavaScript 设计模式之单体模式

什么是单体模式?

单体模式,也叫单例模式,是一种面向对象设计模式,它保证一个类只能有一个实例,并提供一个访问它的全局访问点。

单体模式的优点

  1. 提供了对唯一实例的受控访问。
  2. 在一个应用程序中,这样的实例很少,因为这会节约系统资源。
  3. 可以用于全局变量,避免命名空间污染。
  4. 提供了对单例对象的集中化管理。

实现单体模式

在 JavaScript 中,单体模式有很多实现方式,下面是一种最常见的实现方式:

var Singleton = (function () {
    var instance;

    function SingletonConstructor() {
        // 单例对象的属性和方法
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = new SingletonConstructor();
            }
            return instance;
        }
    };
})();

在这个实现中,Singleton 是一个函数,它定义了一个包装器,并返回一个对象,这个对象有一个名为 getInstance 的方法。这个方法检查是否已经存在实例了,如果不存在,它就创建一个实例,并返回。

通过 new SingletonConstructor() 创建的实例为单体模式中的单例对象。通过 getInstance 方法访问单例对象。

这种实现方式使用了闭包来保持对 SingletonConstructor 的引用,从而避免了将其暴露在全局作用域。

示例说明

下面两个示例说明如何在 JavaScript 中使用单体模式。

示例一:全局配置对象

在一个 Web 应用程序中,可能需要一个全局的配置对象,用于保存各种配置信息。

var Config = (function () {
    var instance;
    var configData = {
        apiURL: "http://api.example.com",
        apiToken: "xxxxxxxx"
    };

    function ConfigConstructor() {
        // 给单例对象添加属性和方法
        this.getApiURL = function () {
            return configData.apiURL;
        };
        this.getApiToken = function () {
            return configData.apiToken;
        };
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = new ConfigConstructor();
            }
            return instance;
        }
    };
})();

console.log(Config.getInstance().getApiURL());

在这个示例中,单例对象 Config 保存了一个名为 configData 的配置对象。通过调用 Config.getInstance().getApiURL() 方法,可以获取配置对象中的 apiURL 属性的值。

示例二:模态框

在一个 Web 应用程序中,可能需要一个全局的模态框来展示各种弹窗。

var Modal = (function () {
    var instance;
    var modalContainer = document.createElement("div");
    modalContainer.className = "modal-container";

    function ModalConstructor() {
        // 给单例对象添加属性和方法
        this.show = function () {
            document.body.appendChild(modalContainer);
        };
        this.hide = function () {
            document.body.removeChild(modalContainer);
        };
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = new ModalConstructor();
            }
            return instance;
        }
    };
})();

// 显示模态框
Modal.getInstance().show();
// 隐藏模态框
Modal.getInstance().hide();

在这个示例中,单例对象 Modal 保存了一个名为 modalContainer 的模态框容器。通过调用 Modal.getInstance().show() 方法,可以显示模态框,在调用 Modal.getInstance().hide() 方法后,模态框会被隐藏。

结语

单体模式是一种非常实用的设计模式,在 JavaScript 的应用中也有很多的应用场景。使用单体模式可以保证对象的唯一性,并提供了对单例对象的集中化管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript 设计模式之单体模式 面向对象学习基础 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • layui使用form表单实现post请求页面跳转的方法

    当我们使用layui时,可以通过form表单的方式来实现post请求页面跳转。接下来将介绍layui使用form表单实现post请求页面跳转的方法的攻略。 步骤一:在页面中引入layui模块,引入form模块 <!– 引入layui –> <script src="path/layui/layui.js">&l…

    JavaScript 2023年6月10日
    00
  • JS实现DOM删除节点操作示例

    下面是JS实现DOM删除节点操作的完整攻略: 步骤一:获取要删除的节点 首先,我们需要获取要删除的节点。可以通过document.querySelector()或document.getElementById()等方法获取到要删除的节点。 示例1: // 通过id获取要删除的节点 var nodeToRemove = document.getElementB…

    JavaScript 2023年6月10日
    00
  • JS实现Cookie读、写、删除操作工具类示例

    下面就是详细讲解“JS实现Cookie读、写、删除操作工具类示例”的完整攻略。 什么是Cookie? 先来简单介绍一下什么是Cookie。Cookie是一种在客户端(浏览器)存储数据的技术,用于存储各种信息,如登录状态、用户个性化设置、购物车商品等。Cookie的使用可以在服务器端通过响应头设置Cookie,在客户端通过document.cookie读取和修…

    JavaScript 2023年6月10日
    00
  • JavaScript中Number对象的toFixed() 方法详解

    JavaScript中Number对象的toFixed() 方法详解 toFixed() 方法是JavaScript中Number对象的一个方法,可以将数字保留指定位数的小数。在本文中,我们将详细介绍这个方法的用法和示例,以便帮助读者更好地理解。 语法 toFixed() 方法的语法如下: number.toFixed([digits]) 其中,digits…

    JavaScript 2023年5月28日
    00
  • 在 React 中使用 i18next的示例

    当开发 React 应用时,国际化(i18n)成为一个非常重要的问题。i18next 是一个非常流行的 i18n 解决方案,它提供了友好的 API、广泛的文件格式支持(如 JSON、YAML 等)以及非常灵活的插件系统,支持多种后端存储和本地化工具。 在使用 React 开发应用时,我们可以利用 i18next 帮助我们实现国际化。以下是实现“在 React…

    JavaScript 2023年6月11日
    00
  • DOM操作一些常用的属性汇总

    DOM(文档对象模型)操作是前端开发中非常重要的一环,掌握 DOM 操作能够帮助我们轻松地对 HTML 页面进行修改和交互。 以下是一些常用的 DOM 属性汇总: 获取元素 我们常常需要找到特定的 HTML 元素并进行修改,这时就需要用到 DOM 获取元素的方法。 getElementById 通过元素的 ID 获取特定元素。 const element =…

    JavaScript 2023年6月10日
    00
  • vue的table表格组件的封装方式

    下面我来详细讲解 “Vue的Table表格组件的封装方式”。 一、前言 Vue的Table表格组件在许多Web应用程序中都有着广泛的应用,Table组件可以方便地呈现大量的数据,并提供强大的过滤、搜索、分页等功能,十分受 Web 开发者的喜欢。因此,本文将为大家分享一种Vue的Table表格组件的封装方式。 二、封装方式 1、基本思路 Vue的Table表格…

    JavaScript 2023年6月10日
    00
  • Javascript技术栈中的四种依赖注入详解

    下面详细讲解“Javascript技术栈中的四种依赖注入详解”。 什么是依赖注入 依赖注入(Dependency Injection,简称DI)是一种软件设计模式,可以在某些情况下提高代码的松散度和可维护性。它的核心思想是将组件之间的依赖关系由程序员手动编写代码设置,转化为由容器自动完成依赖关系的注入。 在Javascript技术栈中,一般将依赖注入分为以下…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部