JavaScript学习之设计模式-责任链模式

news/2024/5/19 15:36:36 标签: JavaScript, 设计模式, 责任链模式

责任链模式责任链模式得角色分为发送者和接收者。发送者发送请求,接收者链中的第一个处理请求,当接受者不能处理请求时,将请求发送给下一个接收者。

责任链模式的特点: 1. 发送者只知道责任链中的第一个接收者。

                                  2.每一个接受者都对请求进行分析,要么处理它,要么往下传递。

                                  3.如果没有任何接受者处理请求,那么请求将从链上离开,不同的实现对此有不同的反应。

                                  4.每一个接收者知道的其他对象只有一个,即它的下家对象。

现有一个任务 需要Python实现。项目组中有 小1,小2,小3,小4分别会Java,C++,Python,C#。项目经理要把它分给谁呢?项目经理嫌麻烦,不像一个一个的问,就直接给了小1。小1发现自己不会,就把他推给了小2,小2也发现自己不会就把他推给了小3,小3发现自己会Python,就把这个任务做了。()。

<!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>
			//**责任链模式
			//发送者 ,及接受者,发送者只知道责任链中的第一个接收者。
			//做项目  任务, 人员(及接受者)
			//做项目 ->:项目经理 :->task  项目组[小A,小B,小C,小D]
			var Assign = function(task){
				this.task = task;
			}
			var WorkFlow = function(assign){
				this.assign = assign;
			}
			WorkFlow.prototype = {
				constructor:WorkFlow,
				doHander:function(es){
					for(var i = 0, length = es.length; i < length; i++){
						if(es[i].cando == this.assign.task){
							es[i].doWork();
							break;
						}
					}
				}
			};
			var Accept =  function(name,cando){
				this.name = name;
				this.cando = cando;
				this.doWork = function(){
					document.write(this.name + " cando " + this.cando);
				}
			}

			var agn = new Assign("javascript");
			var es = [];
			var accept1 = new Accept("xiao 1","java");
			var accept2 = new Accept("xiao 2","javascript");
			var accept3 = new Accept("xiao 3","c语言编程");
			var accept4 = new Accept("xiao 4","c++编程");
			// es.push(accept1);
			// es.push(accept2);
			// es.push(accept3);
			// es.push(accept4);
			var wk = new WorkFlow(agn);
			//wk.doHander([accept1,accept2,accept3,accept4]);



			var WorkFlow2 = function(assign){
				this.assign = assign;
			}
			WorkFlow2.prototype = {
				constructor:WorkFlow,
				doHander:function(es){
					if(es.cando == this.assign.task){
						es.doWork();
					}else{
						arguments.callee.call(this,es.getSuccessor());
					}
				}
			};

			var Executer = function(name,cando){
				this.name = name;
				this.cando = cando;
				this.successor = null;
			}
			Executer.prototype = {
				constructor:Executer,
				doWork:function(){
					document.write(this.name + " cando " + this.cando);
				},
				setSuccessor:function(essor){
					this.successor = essor;
				},
				getSuccessor:function(){
					return this.successor;
				}
			}
			var execute1 = new Executer("xiao 1","java");
			var execute2 = new Executer("xiao 2","javascript");
			var execute3 = new Executer("xiao 3","Python");
			var execute4 = new Executer("xiao 4","c++编程");
			execute1.setSuccessor(execute2);
			execute2.setSuccessor(execute3);
			execute3.setSuccessor(execute4);
			var agn = new Assign("Python");
			var work = new WorkFlow2(agn);
			work.doHander(execute1);
		</script>
	</head>
	<body>
	</body>
</html>



 输出 xiao 3 cando Python

    


http://www.niftyadmin.cn/n/789797.html

相关文章

JavaScript学习之设计模式-命令模式

命令模式->的角色分为&#xff1a;调用者-命令类&#xff08;执行命令的接口和类&#xff09;->接收者。 调用者调用命令接口&#xff0c;命令接口调用接收者&#xff0c;真正的处理在接收者中完成。举个例子&#xff0c;比如一个机器人&#xff0c;需要走路&#xff0c…

JavaScript学习之设计模式-观察者模式

观察者模式的对象分为以下几种&#xff1a; 观察者&#xff08;抽象观察者&#xff0c;具体观察者&#xff09; 主题&#xff08;抽象主题&#xff0c;具体主题&#xff09;&#xff08;主题中有存放观察者的数组&#xff0c;发布消息的方法&#xff09; 有时候&#xff0c;观…

学习英语的好方法

[sizemedium]最近看到连岳老师的一篇文章&#xff0c;其中写道&#xff1a;“学好英语&#xff0c;无法好到当工作语言&#xff0c;至少基本的听说读写要过关&#xff0c;英语现在是世界语言&#xff0c;资讯及观点的富矿区&#xff0c;而且是一门不需要审核的语言&#xff0c;…

JavaScript学习之设计模式-代理模式

代理模式概念&#xff1a; 为其他对象提供访问一个代理对象&#xff0c;以控制对对象本身的访问&#xff0c; 在某些情况下&#xff0c;一个客户不想或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式的角色&#xff1a;…

JavaScript学习之单体模式

单体模式是JavaScript中最常见的设计模式&#xff0c;它将代码块划分到不同的逻辑单元中&#xff0c;分开在不同的命名空间中&#xff0c;以防止调用方法冲突&#xff0c;单体模式只有一个实例。 简单单体 // 简单单体var Singleton {name:fxy,age:10,getName:function(){ret…

fenby C语言 P22

#include <stdio.h> int main(){ char array[]{t,o,m,c,a,t}; int i; for(i0;i<6;i) { printf("%c",array[i]); } return 0; } 转载于:https://www.cnblogs.com/amiaojiang/p/4505994.html

JavaScript学习之遍历多维数组

JavaScript提供了forEach方法遍历数组&#xff0c;但是只能遍历一维数组。今天学习了一下记录下来 这里有篇博客介绍JavaScript多维数组如何建立很详细 http://blog.csdn.net/wangyuchun_799/article/details/38460515 我自己的写法 var arr [1,2,3,4,[5],[6,7,[8,9,[10,11…

javascript学习之继承

JavaScript实现继承 JavaScript实现继承的方式有三种&#xff0c;第一种&#xff0c;借用构造函数继承&#xff0c;第二种&#xff1a;原型继承。第三种&#xff1a;原型继承和借用构造函数继承的混合使用。 1. 借用构造函数继承&#xff1a; 是子类调用父类的模板&#xff0…