职责链模式的应用

当算法牵涉到一种链型运算,而且不希望处理过程中有过多的循环和条件选择语句,并
且希望比较容易的扩充文法,可以采用职责链模式。
1、意图
使多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系,可以把这
些对象链成一个链,并且沿着这个链来传递请求,直到处理完为止。
当处理方式需要动态宽展的时候,职责链是一个很好的方式。
2、使用场合
以下情况可以使用职责链模式:
1)有多个对象处理请求,到底怎么处理在运行时确定。
2)希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。
3)可处理一个请求的对象集合应该被动态指定。
3、结构
职责链的结构如下。
其中:
Handler 处理者
方法:HandlerRequest 处理请求
ConcreteHandler 具体处理者
关联变量:successor (后续)是组成链所必需。
4、实例
下面的实例反映了上面职责链的工作过程,注意链是在运行中建立的。
using System;
using System.Windows.Forms;
namespace 基本职责链{
public abstract class Handler{
public Handler successor;
public int s;
public abstract int HandlerRequest(int k);
}
public class ConcreteHandler1:Handler{
public override int HandlerRequest(int k){
int c=k+s;
return c;
}
}
}
调用
Handler m;
private void Form1_Load(object sender, System.EventArgs e){
//建立职责链
Handler ct=new ConcreteHandler1();
Handler ct1=null;
ct.s=0;
m=ct;
ct1=m;
for (int i=1;i<10;i++){
ct=new ConcreteHandler1();
ct.s=i;
ct1.successor=ct;
ct1=ct;
}
}
private void button1_Click(object sender, System.EventArgs e){
//显示
see(m,10);
}
void see(Handler m,int b){
if (m !=null){
int s=m.HandlerRequest(b);
listBox1.Items.Add(s);
m=m.successor;
see(m,s);
}
}
}
我们需要注意,随着技术的进步,设计模式是需要随着时代的进步而进步的。从某种意
义上讲,GoF 的“设计模式”从概念上的意义,要超过对实际开发上的指导,很多当初难以
解决的问题,现在已经可以轻而易举的解决了,模式的实现更加洗练,这就是我们设计的时
候不能死搬硬套的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值