您的位置:首页 > 大数据 > 人工智能

Patterns in SOME –Chain Of Responsibility

2007-03-01 14:23 218 查看
Code in C#:
[align=left] [/align]
[align=left]namespace ChainOfResponsibility_DesignPattern[/align]
[align=left]{[/align]
[align=left] using System;[/align]
[align=left] [/align]
[align=left] abstract class Handler [/align]
[align=left] {[/align]
[align=left] protected Handler successorHandler;[/align]
[align=left] abstract public void HandleRequest(Request request); [/align]
[align=left] public void SetSuccessor(Handler sucessor)[/align]
[align=left] {[/align]
[align=left] successorHandler = sucessor;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class ConcreteHandler1 : Handler[/align]
[align=left] {[/align]
[align=left] override public void HandleRequest(Request request)[/align]
[align=left] {[/align]
[align=left] // determine if we can handle the request[/align]
[align=left] if (request.RequestType == 1) // some complex decision making![/align]
[align=left] {[/align]
[align=left] // request handling code goes here[/align]
[align=left] Console.WriteLine("request handled in ConcreteHandler1");[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] // not handled here - pass on to next in the chain[/align]
[align=left] if (successorHandler != null)[/align]
[align=left] successorHandler.HandleRequest(request);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class ConcreteHandler2 : Handler[/align]
[align=left] {[/align]
[align=left] override public void HandleRequest(Request request)[/align]
[align=left] {[/align]
[align=left] // determine if we can handle the request[/align]
[align=left] if (request.RequestType == 2) // some complex decision making![/align]
[align=left] {[/align]
[align=left] // request handling code goes here[/align]
[align=left] Console.WriteLine("request handled in ConcreteHandler2");[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] // not handled here - pass on to next in the chain[/align]
[align=left] if (successorHandler != null)[/align]
[align=left] successorHandler.HandleRequest(request);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class ConcreteHandler3 : Handler[/align]
[align=left] {[/align]
[align=left] override public void HandleRequest(Request request)[/align]
[align=left] {[/align]
[align=left] // determine if we can handle the request[/align]
[align=left] if (request.RequestType == 3) // some complex decision making![/align]
[align=left] {[/align]
[align=left] // request handling code goes here[/align]
[align=left] Console.WriteLine("request handled in ConcreteHandler3");[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] // not handled here - pass on to next in the chain[/align]
[align=left] if (successorHandler != null)[/align]
[align=left] successorHandler.HandleRequest(request);[/align]
[align=left] } [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] class Request [/align]
[align=left] {[/align]
[align=left] private int iRequestType;[/align]
[align=left] private string strRequestParameters;[/align]
[align=left] [/align]
[align=left] public Request(int requestType, string requestParameters)[/align]
[align=left] {[/align]
[align=left] iRequestType = requestType; [/align]
[align=left] strRequestParameters = requestParameters;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public int RequestType [/align]
[align=left] {[/align]
[align=left] get [/align]
[align=left] {[/align]
[align=left] return iRequestType;[/align]
[align=left] }[/align]
[align=left] set [/align]
[align=left] {[/align]
[align=left] iRequestType = value;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for Client.[/align]
[align=left] ///</summary>[/align]
[align=left] public class Client[/align]
[align=left] {[/align]
[align=left] public static int Main(string[] args)[/align]
[align=left] {[/align]
[align=left] // Set up chain (usually one need to be done once)[/align]
[align=left] Handler firstHandler = new ConcreteHandler1();[/align]
[align=left] Handler secondHandler = new ConcreteHandler2();[/align]
[align=left] Handler thirdHandler = new ConcreteHandler3();[/align]
[align=left] firstHandler.SetSuccessor(secondHandler);[/align]
[align=left] secondHandler.SetSuccessor(thirdHandler);[/align]
[align=left] [/align]
[align=left] // After setting up the chain of responsibility, we can[/align]
[align=left] // now generate requests and pass then off to the [/align]
[align=left] // chain to be handled[/align]
[align=left] [/align]
[align=left] // generate and fire request[/align]
[align=left] Request newRequest = new Request(2,"This are the request parameters");[/align]
[align=left] firstHandler.HandleRequest(newRequest);[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]Code in SOME:[/align]

AHandler ->AHandler[m_successorHandler]
a_HandleCRequest(CRequest )
SetSuccessor(AHandler m_successorHandler)

CConcreteHandler1 : AHandler
o_HandleCRequest(CRequest)

CConcreteHandler2 : AHandler
o_HandleCRequest(CRequest)

CConcreteHandler3 : AHandler
o_HandleCRequest(CRequest)

CRequest
(int _iCRequestType, string _strCRequestParameters) //include defination of 2 private members

CClient
main

CClient.main
{
// Set up chain (usually one need to be done once)
AHandler firstHandler<CConcreteHandler1>.();
AHandler secondHandler<CConcreteHandler2>.();
AHandler thirdHandler<CConcreteHandler3>.();

firstHandler.SetSuccessor(m_successorHandler = secondHandler);
secondHandler.SetSuccessor(m_successorHandler = thirdHandler);

// generate and fire CRequest
CRequest newCRequest.(2,"This are the CRequest parameters");
firstHandler.HandleCRequest<CConcreteHandler1>(CRequest[newCRequest]) //alias of newCRequest
{
<%
// determine if we can handle the CRequest
if (CRequest.CRequestType == 1) // some complex decision making!
{
// CRequest handling code goes here
Console.WriteLine("CRequest handled in ConcreteHandler1");
}
else
{
// not handled here - pass on to next in the chain
if (m_successorHandler != null)
%>
m_successorHandler.HandleCRequest<CConcreteHandler2>(CRequest)
{
<%
// determine if we can handle the CRequest
if (CRequest.CRequestType == 2) // some complex decision making!
{
// CRequest handling code goes here
Console.WriteLine("CRequest handled in ConcreteHandler2");
}
else
{
// not handled here - pass on to next in the chain
if (m_successorHandler != null)
%>
m_successorHandler.HandleCRequest<CConcreteHandler3>(CRequest)
{
<%
// determine if we can handle the CRequest
if (CRequest.CRequestType == 3) // some complex decision making!
{
// CRequest handling code goes here
Console.WriteLine("CRequest handled in ConcreteHandler3");
}
else
{
// not handled here - pass on to next in the chain
if (m_successorHandler != null)
m_successorHandler.HandleCRequest(CRequest);
}
%>
};
<%}%>
};
<%}%>
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: