步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx

步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx

ID:50360668

大小:216.14 KB

页数:8页

时间:2020-03-08

步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx_第1页
步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx_第2页
步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx_第3页
步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx_第4页
步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx_第5页
资源描述:

《步步为营设计模式学习笔记十九ChainofResponsibility职责链模式.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、步步为营.NET设计模式学习笔记十九、ChainofResponsibility(职责链模式)概述在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。意图责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对

2、象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。结构图抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。 生活中的例子击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正

3、。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。击鼓传花便是责任链模式的应用。责任链可能是一条直线、一个环链或者一个树结构的一部分。 示例用例图在公司,员工都有出差的机会,出差就会产生借款,借款时就会产生这个申请单由谁来审批的问题,部门经理、总监和董事长各有不同的审批权限,看我们由这个需求设计的一个职责链模式,用例图如下: 代码设计先创建BorrowApplication.cs:123456789101112public class BorrowApplication{    private string _Name;   

4、 private double _Money;    private string _Purpose;     public string Name    {        get {return _Name;}        set {_Name=value;}    } 13141516171819202122232425262728293031    public double Money    {        get {return _Money;}        set {_Money=value;}    }     public strin

5、g Purpose    {        get {return _Purpose;}        set {_Purpose=value;}    }     public BorrowApplication(string name,double money,string purpose)    {        this._Name=name;        this._Money=money;        this._Purpose=purpose;    }} 再创建Approve.cs:123456789101112131415161718

6、19202122public abstract class Approve{    private string _Name;    private Approve_HighApprove;     public string Name    {        get {return _Name;}        set {_Name=value;}    }     public ApproveHighApprove    {        get {return _HighApprove;}        set {_HighApprove=value

7、;}    }     public Approve(string name)    {        this._Name=name;    } 23242526272829303132333435363738394041424344454647484950515253545556575859    ///

    ///设置高一级审批对象    ///    ///    public void SetHighApprove(Approveapprove)  

8、  {        _HighApprove=approve; 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。