ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:28.47KB ,
资源ID:2412429      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2412429.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(23种设计模式汇总行为型模式职责链模式.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

23种设计模式汇总行为型模式职责链模式.docx

1、23种设计模式汇总行为型模式职责链模式职责链模式意图是对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直道一个对象处理它为止。使用场合1.有多个对象可以处理一个请求,那个对象处理该请求在运行的时候自动确定。2.希望在不明确制定接收者的情况下,向多个对象中的一个提交一个请求。3.可处理一个请求的对象集合应被动态的指定。例如:过滤器:处理或拦截信息,不同的过滤器可以过滤不同的类型的信息,过滤器可以组成职责链模式。时间处理器:不同事件可以有不同的事件处理器,时间处理器组成职责链。然后用户可以不关心事件的类型,交给职责链处理即可。异常处理器

2、:不同的异常处理器对应不同的异常。文法分析器:对给定的进行文法分析,通过扩充职责链扩充文法分析器的功能。分段计算:职责链上的对象在符合条件时进行计算,这样可以去掉语句。结构:定一个处理请求的接口并实现后续链。:处理负责的请求并可访问后继者。如果可以处理该请求,则处理之;否则将该请求转发给后继者。向链上的具体处理对象提交请求。职责链模式构成与执行效率有些情况下,职责链中各对象完成的任务没有包含性,如在文法分析其中各种是平行关系。这时,职责链中对象的顺序对执行结果没有影响。然而由于职责链是串行的德,链中的前一个对象无法完成任务就交给后一个对象完成。因此职责链中对象的顺序组织方式不同,会大大影响程序

3、的执行效率。在组织职责链对象的顺序时,应将较常用的对象放置在链的前端。结果使用职责链降低了请求与响应的耦合性,职责链的顺序可以有用户来决定。采用职责链的不足如果没有适合处理请求的对象,请求将对不到处理。文法分析器四则运算式解析这里我们的目的是将普通中则表达式转化为后则表达式。方案:四则运算式涉及到种,即参与运算的数字、运算符(以及将来肯能扩充的运算符)、左括号(和右括号)。为了方便字符串分割,这里将字符串的格式规定为数值和运算符、运算符与运算符之间都用空格隔开。例如(_2_+_3_)_/_3采用ArrayList模拟堆栈Stack.csusing System;using System.Col

4、lections;using System.Text;namespace ChainofResposibility.EX24_3 /*/ / Stact采用ArrayList模拟堆栈 / class AStack private ArrayList myStact; public int Count get return myStact.Count; public AStack() myStact=new ArrayList(); public void Push(Object o) myStact.Add(o); public Object Pop() int idx = myStact.C

5、ount - 1; if (idx 0) throw new Exception(堆栈已空); object o = myStactidx; myStact.RemoveAt(idx); return o; public Object Pop2() if (myStact.Count = 0) throw new Exception(堆栈已空); object o = myStact0; myStact.RemoveAt(0); return o; public bool IsEmpty() return(myStact.Count=0); public object TopItem() in

6、t idx = myStact.Count - 1; if (idx0) throw new Exception(堆栈已空); object o = myStactidx; return o; 处理四则表达式中token的基础类TreatToken.csusing System;using System.Collections;using System.Text;namespace ChainofResposibility.EX24_3 /*/ / TreatToken处理四则表达式中token的基础类 / abstract class TreatToken /用来处理token的临时堆栈 p

7、rotected AStack st; /用来保存结果的堆栈 protected AStack stOutput; /Next构成职责链 protected TreatToken _next; public TreatToken Next get return _next; set _next = value; public TreatToken(AStack st, AStack stout) this.st = st; this.stOutput=stout; public abstract void Treat(string s); 在这个抽象类中定义了职责链的关系、处理过程中需要用到的

8、堆栈和处理接口。本例有两个Tekon需要处理,即数字和运算符,因为分别对应处理这两种类型的子类:NumberToken.csusing System;using System.Collections;using System.Text;using CommonFrameworkWBs.ValidateTool;namespace ChainofResposibility.EX24_3 /*/ / NumberToken处理数字 / class NumberToken:TreatToken public NumberToken(AStack st, AStack stout) : base(st

9、, stout) public override void Treat(string s) ValidateNumber vn = new ValidateNumber(); if (vn.IsNumber(s) this.stOutput.Push(s); else this.Next.Treat(s); 处理数字的部分很简单,只要将数字如栈即可。应为后则表达式通过运算符的顺序控制计算,所以参与运算的数字顺序不变。处理运算符的代码:OperatorToken.csusing System;using System.Collections;using System.Text;namespace

10、 ChainofResposibility.EX24_3 /*/ / OperatorToken处理操作符+-*/()等 / class OperatorToken:TreatToken private MyOperatoer ope; public OperatorToken(AStack st, AStack stout, MyOperatoer op) : base(st, stout) this.ope = op; public override void Treat(string s) if (s = ope.OP) if (st.IsEmpty() | s = () st.Push

11、(ope); else MyOperatoer o = (MyOperatoer)st.TopItem(); while (o.Level = ope.Level | ope.OP = ) MyOperatoer o1 = (MyOperatoer)st.Pop(); if (o1.OP = () break; this.stOutput.Push(o1); if (st.IsEmpty() break; o=(MyOperatoer)st.TopItem(); if (ope.OP != ) st.Push(ope); else this.Next.Treat(s); 处理未知的运算符的类:

12、OtherToken.csusing System;using System.Collections;using System.Text;namespace ChainofResposibility.EX24_3 class OtherToken:TreatToken public OtherToken() : base(null, null) public override void Treat(string s) if (s != ) throw new Exception(无法识别的操作符+s); 负责将组装职责链并完成计算:Parser.csusing System;using Sys

13、tem.Collections.Generic;using System.Text;namespace ChainofResposibility.EX24_3 /*/ / Parser采用职责链将四则元算转化为后表达式 / class Parser AStack sttemp = new AStack(); AStack stoutput = new AStack(); TreatToken tk; public Parser() NumberToken nt=new NumberToken(sttemp,stoutput); OperatorToken op1 = new OperatorToken(sttemp,stoutput,new MyOperatoer(+,11); OperatorToken op2 = new OperatorToken(sttemp, stoutput, new MyOperatoer(-, 11); OperatorToken op3 = new OperatorToken(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1