js33--责任链模式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8 src=../commons/CommonUtil.js ></script>
<script type=text/javascript charset=utf-8>
//责任链模式 responsibility
//目的:发出者 和接受者之间的耦合
/**
* 发送者知道链中的第一个接受者,它向这个接受者发出请求
每一个接受者都对请求进行分析,要么处理它,要么往下传递
每一个接受者知道的其他对象只有一个,即它的下家对象
如果没有任何接受者处理请求,那么请求将从链上离开,不同的实现对此有不同的反应。
*/
//做项目 ->:项目经理 :->task 项目组[小A,小B,小C,小D]
//任务的类(发送者)
var Assign = function(task){
this.task = task ;
}; // 接受任务的类
var WorkFlow = function(assign){
this.assign = assign;
}; WorkFlow.prototype = {
constructor:WorkFlow,
//分析当前的任务到底谁能去执行
filterHandler:function(es){
for(var i = 0 ,len = es.length; i <len;i++ ){
//如果当前的任务正好是你这个人比较擅长的 那就之间执行
if(this.assign.task === es[i].cando){
return es[i].todo();
}
}
return ;
}
}; //处理者
var Executor = function(name,cando){
this.name = name ; //接受者的姓名
this.cando = cando; //擅长的任务
};
Executor.prototype = {
constructor:Executor,
todo:function(){
document.write(this.name + '开发:' + this.cando);
}
}; //实例化4个处理对象
var e1 = new Executor('小A','javascript编程');
var e2 = new Executor('小B','css编程');
var e3 = new Executor('小C','java编程');
var e4 = new Executor('小D','sql编程'); //实例化任务对象
var assign = new Assign('java编程');
//处理任务的类实例
var wf = new WorkFlow(assign);
wf.filterHandler([e1,e2,e3,e4]); </script>
</head>
<body>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8 src=../commons/CommonUtil.js ></script>
<script type=text/javascript charset=utf-8>
//责任链模式 responsibility
//目的:发出者 和 接受者之间的耦合
/**
* 发送者知道链中的第一个接受者,它向这个接受者发出请求
每一个接受者都对请求进行分析,要么处理它,要么往下传递
每一个接受者知道的其他对象只有一个,即它的下家对象
如果没有任何接受者处理请求,那么请求将从链上离开,不同的实现对此有不同的反应。
*/ //做项目 ->:项目经理 :->task 项目组[小A,小B,小C,小D] //任务的类(发送者)
var Assign = function(task){
this.task = task ;
}; // 接受任务的类
var WorkFlow = function(assign){
this.assign = assign;
}; WorkFlow.prototype = {
constructor:WorkFlow,
//当前过滤函数只接受 一个接收者对象(链中的第一个接收者)
filterHandler:function(executor){
//如果当前任务 适合 就直接执行
if(this.assign.task === executor.cando ){
return executor.todo();
} else {
//call apply 大显身手。arguments.callee当前函数
//arguments.callee(executor.successor),要用this,不然this就不是当前对象了。
arguments.callee.call(this,executor.successor);
}
}
}; //处理者
var Executor = function(name,cando){
this.name = name ;//接受者的姓名
this.cando = cando;//擅长的任务
this.successor = null;//保留当前接受者的下一个对象的引用,没有数据类型,
};
Executor.prototype = {
constructor:Executor,
todo:function(){
document.write(this.name + '开发:' + this.cando);
},
//设置责任链的配置函数
setSuccessor:function(successor){
this.successor = successor;
}
}; //实例化4个处理对象
var e1 = new Executor('小A','javascript编程');
var e2 = new Executor('小B','css编程');
var e3 = new Executor('小C','java编程');
var e4 = new Executor('小D','sql编程');
//设置对象之间的责任链关系
e1.setSuccessor(e2);
e2.setSuccessor(e3);
e3.setSuccessor(e4); //实例化任务对象
var assign = new Assign('sql编程');
//处理任务的类实例
var wf = new WorkFlow(assign);
wf.filterHandler(e1); </script>
</head>
<body>
</body>
</html>
js33--责任链模式的更多相关文章
- 23种设计模式--责任链模式-Chain of Responsibility Pattern
一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...
- ResponsibleChain(责任链模式)
/** * 责任链模式 * @author TMAC-J * 老板讲任务交给CTO,CTO自然不会亲自去做,又把人物分配给项目经理,项目经理再把任务分配给组长,组长再分配给个人 * 如果中途哪个环节出 ...
- C#设计模式-责任链模式
在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以在面试的 ...
- 责任链模式/chain of responsibility/行为型模式
职责链模式 chain of responsibility 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处 ...
- 设计模式C#实现(十四)——责任链模式
意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象 ...
- [工作中的设计模式]责任链模式chain
一.模式解析 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知 ...
- 十一个行为模式之责任链模式(Responsible Chain Pattern)
定义: 将具有相同接口的责任类串行在一起,解耦请求的发送者和处理者.沿着这条链进行请求,直到有对象处理它为止. 结构图: Handler:抽象处理类,定义了所有责任类处理方法的接口,不同的处理方法在子 ...
- 浅谈Java五大设计原则之责任链模式
首先我们得先定义一个责任链模式: 责任链模式是一种线性执行流程,多个对象都有机会去执行同一个任务,只是在执行过程中, 由于执行的权利和范围不一样,那么当自己不能处理此任务时,就必须将这个任务抛给下一个 ...
- C#设计模式(21)——责任链模式
一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所 ...
- 【2016-10-12】【坚持学习】【Day3】【责任链模式】
今天学习责任链模式 例子: 采购审批系统 采购单需要经过不同人审批 采购价格<500 部门经理审批 采购价格<1000 部门主任审批 采购价格<2000 副总审批 采购价格<5 ...
随机推荐
- COGS——T1588. [USACO FEB04]距离咨询
http://cogs.pro/cogs/problem/problem.php?pid=1588 ★★ 输入文件:dquery.in 输出文件:dquery.out 简单对比时间限制:1 ...
- 【C语言】打印1到最大的n位数
//打印1到最大的n位数 //输入数字n,按顺序打印出从1到最大的n位十进制数. 比方:输入3.则打印出1.2一直到最大的3位数999 #include <stdio.h> #includ ...
- 基于Linux的智能家居的设计(2)
1 系统整体设计方案 智能家居系统的是一个实时查询家庭的温湿度.照明控制.自己主动控制的设定.集家庭娱乐.智能安防为一体,大量数据快处理.可靠的系统,因此在硬件和软件上都有非常大的要求,因此在这里进 ...
- webpack03
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Sqoop-1.4.6工具import和export使用详解(官网)
不多说,直接上干货! 1.Sqoop Import (进入官网) 因为,sqoop的使用方式是: sqoop COMMAND ARGS. 以下是 sqoop COMMAND ARGS 以下是 ...
- Multi-process Architecture
For Developers > Design Documents > Multi-process Architecture This document describes Ch ...
- Firefox 浏览器有用的插件
1.Undo Closed Tabs Button或Undo Closed Tabs Button (revived) 恢复关闭的标签页 2.NetVideohunter Video Download ...
- 威联通 移动硬盘路径 /share/USBDisk1
威联通 移动硬盘路径 /share/USBDisk1 cd /share/USBDisk3/Movies
- 用vuex构建单页
原文地址:点我 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和 ...
- node.js状态码
100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本200——交易成功201——提示知道新文件的URL202——接受和处理.但处理未完成203——返回信息不确定或不完整2 ...