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 ...
随机推荐
- 2014 CodingTrip - 携程编程大赛 (预赛第二场)
1001: 食物链(poj1182),直接贴代码,稍作可过 并查集 // // main.cpp // 携程1 // // Created by zhang on 14-4-11. // Copyri ...
- C语言调试小技巧
经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的优化后,会变得“难以辨 ...
- HDU 4406 GPA
GPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 440664 ...
- EChart报表插件使用笔记(1)
报表插件Echart java类 package com.spring.controller; import java.io.IOException; import java.util.Arrays; ...
- 已知二叉树的中序序列为DBGEAFC,后序序列为DGEBFCA,给出相应的二叉树
面对这种问题时我们该怎么解决? 今天写数据结构题.发现了一道总是碰见问题的题在这里我写了一种求解方法我自己称它为分层递归求解. 第一步通过观察我们知道后序遍历时最后一个是根节点A 在中序序列中A的左边 ...
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
本文原创,转载请注明出处:http://blog.csdn.NET/qinjuning 在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与 ...
- scikit-learn 为机器学习
如何使用 scikit-learn 为机器学习准备文本数据 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被 ...
- Spring-MVC:应用上下文webApplicationContext
一.先说ServletContext javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息.ServletCon ...
- 2.CString转换到char*
多字节模式下: CString -->char * CString str1 ="; char *t1 =str1.GetBuffer(str1.GetLength()); str1. ...
- b模式处理文件
1.读 f=open('cheng','rb') date=f.read() print(date.decode()) 2.写 f=open('cheng','ab') f.write('chengz ...