JavaScript设计模式(八):套餐服务-外观模式

简介: 套餐服务-外观模式

外观模式(Facade)

为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统接口访问更容易

在JavaScript中有时也会用于对底层结构兼容性统一封装简化用户使用

需求:为指定按钮添加一个事件

document.onclick = function (e) {
   
    if (e.target === document.getElementById('btn01')) {
   
        alert('btn01 的点击事件');
    }
};
  • ⚠ 注意:以上方法的缺点:

    • document 绑定了 onclick 事件,但 onclickDOM0级事件,也就是说这种方式绑定的事件相当于为元素绑定一个事件方法,所以如果团队中有人再次通过这种方式为 document 绑定 click 事件时,就相当于重复定义了一个方法,会将你定义的 click 事件方法覆盖,如下列程序:

        document.onclick = function (e) {
             
            if (e.target === document.getElementById('btn01')) {
             
                alert('btn01 的点击事件');
            }
        };
      
        document.onclick = function (e){
             
            console.log('document事件覆盖掉了上边的事件');
        };
      
  • 外观模式实现优化:应使用 DOM2级事件 处理程序提供的方法 addEventListener 来实现

      // 外观模式实现
      function addEvent(dom, type, fn) {
         
          // 对于支持DOM2级事件处理程序addEventListener方法的浏览器
          if (dom.addEventListener) {
         
              dom.addEventListener(type, fn, false);
              // 对于不支持addEventListener方法但支持attachEvent方法的浏览器
          } else if (dom.attachEvent) {
         
              dom.attachEvent('on' + type, fn);
              // 对于不支持addEventListener方法也不支持attachEvent方法,但支持on+'事件名'的浏览器
          } else {
         
              dom['on' + type] = fn;
          }
      }
    
      addEvent(document.getElementById('btn01'), 'click', function (e) {
         
          alert('btn01 的点击事件');
      });
    
      addEvent(document, 'click', function (e) {
         
          console.log('document事件覆盖掉了上边的事件');
      });
    

特点:

规整复杂接口,解决兼容问题

目录
相关文章
|
7天前
|
设计模式 缓存 应用服务中间件
「全网最细 + 实战源码案例」设计模式——外观模式
外观模式(Facade Pattern)是一种结构型设计模式,旨在为复杂的子系统提供一个统一且简化的接口。通过封装多个子系统的复杂性,外观模式使外部调用更加简单、易用。例如,在智能家居系统中,外观类可以同时控制空调、灯光和电视的开关,而用户只需发出一个指令即可。
110 69
|
6天前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
50 33
|
4月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
5月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
45 2
|
3月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
41 3
|
4月前
|
设计模式 Java
Java设计模式-外观模式(11)
Java设计模式-外观模式(11)
|
3月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
39 0
|
5月前
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
5月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
74 1