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"
}));
目录
相关文章
|
1月前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
1月前
|
设计模式 前端开发 算法
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
|
2天前
|
设计模式 JavaScript 前端开发
[JavaScript设计模式]惰性单例模式
[JavaScript设计模式]惰性单例模式
|
3天前
|
设计模式
职责链模式-大话设计模式
职责链模式-大话设计模式
7 1
|
1天前
|
设计模式 JavaScript 前端开发
JavaScript设计模式——代理模式
JavaScript设计模式——代理模式
|
8天前
|
设计模式
行为设计模式之职责链模式
行为设计模式之职责链模式
|
1月前
|
设计模式 JavaScript 前端开发
js设计模式-观察者模式与发布/订阅模式
观察者模式和发布/订阅模式是JavaScript中的两种设计模式,用于处理对象间的通信和事件处理。观察者模式中,一个主题对象状态改变会通知所有观察者。实现包括定义主题和观察者对象,以及在主题中添加、删除和通知观察者的功能。发布/订阅模式则引入事件管理器,允许发布者发布事件,订阅者通过订阅接收通知。
|
1月前
|
设计模式 Go
[设计模式 Go实现] 行为型~职责链模式
[设计模式 Go实现] 行为型~职责链模式
|
1月前
|
设计模式 存储 前端开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
|
1月前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。

热门文章

最新文章