JavaScript设计模式(十九):有序车站-职责链模式

简介: 有序车站-职责链模式

职责链模式(Chain of Responsibility)

解决请求的发送者与请求的接受者之间的耦合,通过职责链上的多个对象对分解请求流程,实现请求在多个对象之间的传递,直到最后一个对象完成请求的处理。

分解需求

把一个半成品的需求分解为要基于那些功能模块去实现,各自负责各自的职责,提高实现需求的颗粒度

例如一个请求渲染的需求

分模块细化颗粒度

// data.json
{
   
    "code": 200,
    "data": {
   
        "name": "Lee",
        "age": 18
    },
    "msg": "ok"
}

第一站 —— 请求模块

/**
 * 异步请求对象(简化版本)
 * @param {string} url 请求地址
 * @param {string} type 请求类型
 * @param {object} data 请求数据
 */
const request = function (url, type, data) {
   
    // XHR对象 简化版本 IE另行处理
    var xhr = new XMLHttpRequest();
    // 请求返回事件
    xhr.onload = function (event) {
   
        // 请求成功
        if (xhr.status === 200) {
   
            console.log(xhr);
            success(xhr.response);
        }
        // 请求失败
        else {
   
            fail(xhr.statusText);
        }
    };
    // 拼接请求字符串
    url += '?';
    for (let key in data) {
   
        url += key + '=' + data[key] + '&';
    }
    // 发送异步请求
    xhr.open(type, url, true);
    xhr.send(null);
};

下一站 —— 响应数据适配模块

/**
 * 成功的回调
 * @param {object} res 
 */
function success(res) {
   
    let {
    data } = JSON.parse(res);
    render(data);
}

/**
 * 失败的回调
 * @param {string} err 
 */
function fail(err) {
   
    console.log(err);
}

终点站 —— 创建组件模块

/**
 * 渲染数据 `<label>Lee: </label><span>18</span>`
 * @param {object} data 响应数据 
 */
function render(data) {
   
    const label = document.createElement('label');
    label.innerText = data.name + ': ';
    const span = document.createElement('span');
    span.innerText = data.age;
    document.body.appendChild(label);
    document.body.appendChild(span);
}

request('./data.json', 'GET', {
    id: 'abc' });

单元测试

解决目前请求接口地址未提供问题

success(JSON.stringify({
   
    "code": 200,
    "data": {
   
        "name": "Tom",
        "age": 24
    },
    "msg": "ok"
}));
目录
相关文章
|
8月前
|
设计模式 算法 前端开发
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
一、入门 什么是职责链模式? 职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。 为什么需要职责链模式? 使用
342 16
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
319 124
|
11月前
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
352 8
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
219 2
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
342 1
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
325 7
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
203 6
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
180 6
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
174 0