Design Patterns -- Chain of Responsibility (CoR)
2006-07-05 10:06
633 查看
1. The intent of the Chain of Responsibility is to avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. To apply this pattern, chain the receiving objects and pass the request along the chain until an object handles it, see pic:
If you use the CoR pattern, remember: (somewhat like " switch - case - default ")
Only one object in the chain handles a request
Some requests might not get handled
So, in Chain of Responsibility, an object model takes on the job of finding which object can satisfy a client's request, the class diagram:
Chain of Responsibility class diagram
Typically, request handlers are extensions of a base class that maintains a reference to the next handler in the chain, known as the
public abstract class HandlerBase {
...
public void handleRequest(SomeRequestObject sro) {
if(successor != null)
successor.handleRequest(sro);
}
}
A concrete extension of
In my point of view, Chain of Responsibility pass or divides the resiponsibility to the objects in the chain.
It leads to simpler code in both the hierarchy and the client, which is the main advantage of this pattern.
If you use the CoR pattern, remember: (somewhat like " switch - case - default ")
Only one object in the chain handles a request
Some requests might not get handled
So, in Chain of Responsibility, an object model takes on the job of finding which object can satisfy a client's request, the class diagram:
Chain of Responsibility class diagram
Typically, request handlers are extensions of a base class that maintains a reference to the next handler in the chain, known as the
successor. For example, the code:
public abstract class HandlerBase {
...
public void handleRequest(SomeRequestObject sro) {
if(successor != null)
successor.handleRequest(sro);
}
}
A concrete extension of
HandlerBasemight look like this:
public class SpamFilter extends HandlerBase { public void handleRequest(SomeRequestObject mailMessage) { if(isSpam(mailMessage)) { // If the message is spam // take spam-related action. Do not forward message. } else { // Message is not spam. super.handleRequest(mailMessage); // Pass message to next filter in the chain. } } }
In my point of view, Chain of Responsibility pass or divides the resiponsibility to the objects in the chain.
It leads to simpler code in both the hierarchy and the client, which is the main advantage of this pattern.
相关文章推荐
- Design Patterns Uncovered: The Chain Of Responsibility Pattern
- Chain Of Responsibility Design Pattern Example
- 设计模式 Design Parttern ——责任链模式Chain of Responsibility
- Patterns in SOME –Chain Of Responsibility
- 设计模式学习—责任链模式(Chain of Responsibility Design Pattern)
- [Design] Chain of Responsibility Pattern
- Behavioral Patterns Part 1/11: Chain Of Responsibility Pattern
- Chain of Responsibility(Chapter 17 of Pro Objective-C Design Patterns for iOS)
- js 设计模式 第十七章 Chain of Responsibility
- Thinking of Design patterns
- 设计模式(17)-Chain of Responsibility Pattern
- 设计模式----Chain of Responsibility(职责链)模式
- 15.Javascript设计模式之职责链模式----Chain of Responsibility
- The Chain Of Responsibility Pattern
- 责任链模式(Chain of Responsibility Pattern)
- B5:责任链模式 Chain Of Responsibility
- 职责链模式(Chain of Responsibility Pattern)
- 十一个行为型模式1:职责链模式-Chain of Responsibility Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 设计模式笔记(8 CHAIN OF RESPONSIBILITY & COMMAND)
- 责任链模式(Chain of Responsibility Pattern)