JavaScript职责链模式实例方法

本文主要介绍了javascript实现职责链模式概述,详细的介绍了什么是职责链模式和实现方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

什么是职责链模式

职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。举个例子:当你从公交车后门上车之后,你不可能直接把硬币放到收款箱里面, 因为你不知道它在哪,那你就只能把硬币给你前面一个人,让他帮你传到前面一个人手上,这样一直传递到站在收款箱旁边人的手上,由他把硬币放到收款箱里面。

职责链模式思想

请求发送者只需要知道链中的第一个节点,从而弱化了发送者和一组接收者之间的强联系。

立即学习“Java免费学习笔记(深入)”;

JavaScript实现职责链模式(AOP方式)

 Function.prototype.after = function(fn) {  var _self = this;  return function () {    var ret = _self.apply(this, arguments);    if(ret === "nextSuccessor") {     return fn.apply(this, arguments);    }    return ret;  } }

登录后复制

是的没错,在JavaScript中实现职责链模式就是如此的简单,如果对上面AOP代码不了解可以参考我之前写的这篇文章JavaScript实现AOP,这个方式和装饰者模式看起来很像,从代码上来看确实很像,但是他们的出发点是完全不同的

AOP实现装饰者模式:在不改变已有函数内部的情况下添加一些新的功能,你可以想象一下同心圆,你每调用一次after,就相当于给你的圆外面又加了一个圆来包裹住它。注意它们是包含关系

AOP实现职责链模式:在函数执行之后确定是否执行下一个函数,你每次调用after,都相当于在已有函数之后添加一个函数,至于是否执行后面这个函数,取决于前一个函数的返回值。注意它们是链式关系

职责链模式实例

function cat (type) {  if(type == "cat") {    console.log("我是猫猫");  } else {    return "nextSuccessor"  }}function dog (type) {  if(type == "dog") {    console.log("我是狗狗");  } else {    return "nextSuccessor"  }}function pig (type) {  if(type == "pig") {    console.log("我是猪猪");  } else {    return "nextSuccessor"  }}Function.prototype.after = function(fn) {  var _self = this;  return function () {    var ret = _self.apply(this, arguments);    if(ret === "nextSuccessor") {      return fn.apply(this, arguments);    }    return ret;  }}var pet = cat.after(dog).after(pig);pet("pig"); //我是猪猪pet("dog"); //我是狗狗pet("cat"); //我是猫猫

登录后复制

请看上述代码,我们给pet方法传入了三个不同的参数,得到了不同的结果。拿第一次调用举例,其执行过程是这样的:传入“pig”,先由cat方法判断,cat方法发现自己处理不了,于是把“pig”传递给dog方法(return “nextSuccessor”来表示传递给下一个函数),dog方法发现自己也处理不了,再接着把“pig”传递到pig方法,pig方法可以处理,控制台打印,我是猪猪。

你可能会觉得这不是浪费精神么,上述功能只需使用下面的几行代码就能解决,为何还要多写上面那么多代码

function pet(type) {  if(type == "cat") {    console.log("我是猫猫");  } else if(type == "dog") {    console.log("我是狗狗");  } else if(type == "pig") {    console.log("我是猪猪");  }}pet("pig"); //我是猪猪pet("dog"); //我是狗狗pet("cat"); //我是猫猫

登录后复制

这样看来,好像是简单了很多。但是你有没有考虑过,如果以后突然多了猴子这种动物,如果使用上面的垃圾代码,那你就要去修改pet函数的源码,多添加一条if语句判断是不是猴子,其实这也还好,如果是加了1万种动物呢?那你就要在pet这个函数里添加1万条if语句,什么?还不够浮夸?那你有没有考虑过一种动物还会分很多品种,比如说猫咪分为长毛猫,短毛猫。这样你的代码就会涉及到嵌套if语句。恕我直言,现在你的代码已经丑成狗了,嘻嘻

但是如果使用职责链模式,每多一个种动物,我们就给他定义一个函数,然后添加到职责链上,这样一来,新的函数就和原来的函数高度解耦,岂不美哉?

相关推荐:

PHP设计模式——职责链模式_PHP教程

php设计模式 Chain Of Responsibility (职责链模式)

PHP设计模式职责链模式

以上就是JavaScript职责链模式实例方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2788707.html

(0)
上一篇 2025年3月8日 18:30:01
下一篇 2025年3月8日 18:30:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS全排列组合算法实现方法

    全排列组合算法,例如a,b,c,d进行全排列组合,则组合结果为:a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd。实现思路:从数据源拿出一个元素,依次与已存在的组合数据进行组合,循环上面操作直到数…

    2025年3月8日
    200
  • js和css标签内容切换功能的实现教程

    本文主要和大家分享js + css实现标签内容切换功能(实例讲解)。我们先附上效果图,并用实例代码教大家,希望能帮助到大家。 先附上效果图和代码: html 文档: nbsp;html>  Title   window.onload …

    2025年3月8日
    200
  • js编写网页进度条实例方法

    本文主要为大家详细介绍了利用js编写网页进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 一、基本思路 为了让我们编写的网页进度条满足现有需求,又足够轻便,所以使用原生js写一个构造函数,为了见名知义,可以把…

    2025年3月8日 编程技术
    200
  • JS动态修改网页body的背景色实例分享

    本文主要介绍了js动态修改网页body的背景色实例代码 ,需要的朋友可以参考下,希望能帮助到大家。 大部分网页默认的背景色为白色,个人感觉比较刺眼,于是写了个JS的脚本去改变body部分的背景色,代码如下: // ==UserScript=…

    编程技术 2025年3月8日
    200
  • JS表格排序操作实现代码

    本文主要介绍了js实现简单表格排序操作,结合具体实例形式分析了javascript事件响应及table表格动态操作相关技巧,需要的朋友可以参考下,希望能帮助到大家。     sort table   *{ margin:0px; paddi…

    2025年3月8日
    200
  • 几种javascript数组定义的方法详解

    关于数组定义的方法大家了解多少?一般来说分为隐式创建、直接实例化、创建数组并指定长度、后来为了方便直接使用json格式定义数组,本文就和大家分享几种javascript数组定义的方法详解,希望能帮助到大家。 1、什么是数组 数组就是一组数据…

    编程技术 2025年3月8日
    200
  • node.js中http模块和url模块简介

    本文主要给大家简单介绍了关于node.js中的http模块和url模块,文中通过示例代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习,希望能帮助到大家。 前言 本文主要给大家介绍…

    2025年3月8日 编程技术
    200
  • vuejs使用递归组件实现树形目录

    本文主要介绍了vuejs使用递归组件实现树形目录的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助到大家。 首先实现效果如下,觉得菜单还是比较nice的是吧: 这边数据调用的是数据库的数据的,需要数据库进行数据的构造,这…

    2025年3月8日
    200
  • 两种js实现轮播图的方式

    本文主要为大家详细介绍了js实现轮播图的两种方式,一是构造函数、另一种是面向对象方式方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 1、构造函数 nbsp;html>        *{ margin:0;…

    编程技术 2025年3月8日
    200
  • JS实现div点击跳转到另一页面实例代码

    本文主要介绍了js动态添加的p点击跳转到另一页面实现代码,需要的朋友可以参考下,希望能帮助到大家。  p调用函数跳转: var obj = document.getElementById(‘id’);obj.onclick=function…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论