行为型模式-职责链模式
using System;
using System.Collections.Generic;
using System.Text;
namespace 职责链模式
{
/*
* 职责链模式意图:是对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直道一个对象处理它为止。
*
* 职责链模式使用场景:1、有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定
* 2、在不明确指定接受者的情况下,向多个对象中提交一个请求
* 3、可以处理一个请求的对象集合应被动态指定
*/
///<summary>
/// 抽象处理类,定义公共处理方法和设置处理函数链
///</summary>
publicabstractclass Handler
{
private Handler nextHandler;
///<summary>
/// 设置处理函数链
///</summary>
///<param name="nextHandler"></param>
publicvoid SetNextHandler(Handler nextHandler)
{
this.nextHandler = nextHandler;
}
publicabstractvoid HandleRequest(int request);
}
///<summary>
/// 具体处理对象
///</summary>
publicclass ConcreteHandler1 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法1
}
}
publicclass ConcreteHandler2 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法2
}
}
publicclass ConcreteHandler3 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法3
}
}
publicclass AppClient
{
publicstaticvoid Main(string[] args)
{
ConcreteHandler1 h1 =new ConcreteHandler1();
ConcreteHandler2 h2 =new ConcreteHandler2();
ConcreteHandler3 h3 =new ConcreteHandler3();
h1.SetNextHandler(h2);
h2.SetNextHandler(h3);
int[] requests = { 1,2,3,34,5};
foreach (int request in requests)
{
h1.HandleRequest(request);//通过h1的处理方法,顺着方法链处理
}
}
}
}
using System.Collections.Generic;
using System.Text;
namespace 职责链模式
{
/*
* 职责链模式意图:是对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直道一个对象处理它为止。
*
* 职责链模式使用场景:1、有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定
* 2、在不明确指定接受者的情况下,向多个对象中提交一个请求
* 3、可以处理一个请求的对象集合应被动态指定
*/
///<summary>
/// 抽象处理类,定义公共处理方法和设置处理函数链
///</summary>
publicabstractclass Handler
{
private Handler nextHandler;
///<summary>
/// 设置处理函数链
///</summary>
///<param name="nextHandler"></param>
publicvoid SetNextHandler(Handler nextHandler)
{
this.nextHandler = nextHandler;
}
publicabstractvoid HandleRequest(int request);
}
///<summary>
/// 具体处理对象
///</summary>
publicclass ConcreteHandler1 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法1
}
}
publicclass ConcreteHandler2 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法2
}
}
publicclass ConcreteHandler3 : Handler
{
publicoverridevoid HandleRequest(int request)
{
//具体处理方法3
}
}
publicclass AppClient
{
publicstaticvoid Main(string[] args)
{
ConcreteHandler1 h1 =new ConcreteHandler1();
ConcreteHandler2 h2 =new ConcreteHandler2();
ConcreteHandler3 h3 =new ConcreteHandler3();
h1.SetNextHandler(h2);
h2.SetNextHandler(h3);
int[] requests = { 1,2,3,34,5};
foreach (int request in requests)
{
h1.HandleRequest(request);//通过h1的处理方法,顺着方法链处理
}
}
}
}