行为型模式-职责链模式

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的处理方法,顺着方法链处理
}
}
}
}
posted @ 2011-03-22 22:38  日月之明  阅读(262)  评论(0编辑  收藏  举报