在这个层次结构中,每个对象都有一个对下一个对象的引用,这样形成一条链,一个对象要么完成某个操作,要么把请求传给链中的其他对象。客户并不知道哪个对象为其提供了服务。责任链模式有两部分构成:一是处理请求的接口,一个是具体处理的类。
职责链模式避免把一个请求的发送者和请求的接受者进行耦合.
using System;
using System.Collections.Generic;
using System.Text;
namespace ChainofResponsibility
...{
/**//// <summary>
/// 处理请求的抽象类
/// </summary>
public interface IHandler
...{
/**//// <summary>
/// 下一个继任者
/// </summary>
IHandler Successor
...{
get;
set;
}

/**//// <summary>
/// 处理请求
/// </summary>
/// <param name="request">处理</param>
void HandleRequest(int request);
}

/**//// <summary>
/// 职责链处理类一
/// </summary>
public class FritstHandler : IHandler
...{
//下一个继任者
private IHandler _successor;

/**//// <summary>
/// 下一个继任者
/// </summary>
public IHandler Successor
...{
get
...{
return _successor;
}
set
...{
_successor = value;
}
}

/**//// <summary>
/// 处理请求
/// </summary>
/// <param name="request">处理</param>
public void HandleRequest(int request)
...{
if (request > 0 && request < 10)
...{
Console.WriteLine("对象一处理!");
}
else
...{
if (_successor != null)
...{
_successor.HandleRequest(request);
}
else
...{
Console.WriteLine("异常!");
}
}
}
}

/**//// <summary>
/// 职责链处理类二
/// </summary>
public class SecondHandler : IHandler
...{
//下一个继任者
private IHandler _successor;

/**//// <summary>
/// 下一个继任者
/// </summary>
public IHandler Successor
...{
get
...{
return _successor;
}
set
...{
_successor = value;
}
}

/**//// <summary>
/// 处理请求
/// </summary>
/// <param name="request">处理</param>
public void HandleRequest(int request)
...{
if (request <= 0 || request >= 10)
...{
Console.WriteLine("对象二处理!");
}
else
...{
if (_successor != null)
...{
_successor.HandleRequest(request);
}
else
...{
Console.WriteLine("异常!");
}
}
}
}

/**//// <summary>
/// 客户端
/// </summary>
class Program
...{
static void Main(string[] args)
...{
IHandler fstHandler = new FritstHandler();
IHandler scdHandler = new SecondHandler();
fstHandler.Successor = scdHandler;
fstHandler.HandleRequest(5);
Console.ReadLine();
}
}
}
1628

被折叠的 条评论
为什么被折叠?



