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);
}
%>
};
<%}%>
};
<%}%>
};
}
[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);
}
%>
};
<%}%>
};
<%}%>
};
}
相关文章推荐
- Design Patterns Uncovered: The Chain Of Responsibility Pattern
- Design Patterns -- Chain of Responsibility (CoR)
- Behavioral Patterns Part 1/11: Chain Of Responsibility Pattern
- JAVA设计模式-Chain of Responsibility
- 设计模式(17)-Chain of Responsibility Pattern
- 责任链模式(Chain Of Responsibility Pattern)
- 责任链模式(Chain of Responsibility Pattern)
- 职责链模式(Chain Of Responsibility Pattern)
- 设计模式(17)-Chain of Responsibility Pattern
- 责任链模式 chain of responsibility
- 笔记:Gof设计模式--Chain of Responsibility
- B5:责任链模式 Chain Of Responsibility
- Examples of GoF Design Patterns in Java's core ...
- 设计模式——职责链你模式(Chain of Responsibility)
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- Mysql:This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
- 设计模式循序渐进(8)职责链模式 Chain Of Responsibility
- Chain of Responsibility(Chapter 17 of Pro Objective-C Design Patterns for iOS)