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"
}));
目录
相关文章
|
26天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
29 2
|
2月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
34 3
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
65 1
|
4月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
5月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
91 7
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
74 6
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
54 6
|
5月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
48 6
|
5月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
85 0
|
5月前
|
设计模式 缓存 JavaScript
js设计模式实例
【7月更文挑战第2天】JavaScript设计模式包含工厂、单例、建造者、抽象工厂和代理模式等,它们是最佳实践和可重用模板,解决创建、职责分配和通信等问题。例如,工厂模式封装对象创建,单例确保全局唯一实例,建造者模式用于复杂对象构建,抽象工厂创建相关对象集合,而代理模式则控制对象访问。这些模式提升代码质量、可读性和灵活性,是高效开发的关键。
42 0
下一篇
DataWorks