设计模式(13)——责任链(Chain of Responsibility)
来源:互联网 发布:java对数学要求 编辑:程序博客网 时间:2024/04/29 04:05
责任链是什么?
责任链条模式使多个对象都有机会处理请求。打个比方说,责任就是得分,多个对象就是篮球队员,在三分线的远投的时候,球由投手投篮。带球突破则由后卫负责。。。
责任链模式的适用范围
1. 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2. 在不明确指定接收者的情况下向多个对象中的一个提交一个请求。
3. 可处理的一个请求对象集合应被动态指定。
责任链模式的例子
abstract class Logger { public static int ERR = 3; public static int NOTICE = 5; public static int DEBUG = 7; private int mask; // The next element in the chain of responsibility private Logger next; public Logger(int mask) { this.mask = mask; } public void setNext(Logger logger) { next = logger; } public void message(String msg, int priority) { if (priority <= mask) { writeMessage(msg); } if (next != null) { next.message(msg, priority); } } abstract protected void writeMessage(String msg);} class StdoutLogger extends Logger { public StdoutLogger(int mask) { super(mask); } protected void writeMessage(String msg) { System.out.println("Writing to stdout: " + msg); }} class EmailLogger extends Logger { public EmailLogger(int mask) { super(mask); } protected void writeMessage(String msg) { System.out.println("Sending via e-mail: " + msg); }} class StderrLogger extends Logger { public StderrLogger(int mask) { super(mask); } protected void writeMessage(String msg) { System.err.println("Sending to stderr: " + msg); }} public class ChainOfResponsibilityExample { private static Logger createChain() { // Build the chain of responsibility Logger logger = new StdoutLogger(Logger.DEBUG); Logger logger1 = new EmailLogger(Logger.NOTICE); logger.setNext(logger1); Logger logger2 = new StderrLogger(Logger.ERR); logger1.setNext(logger2); return logger; } public static void main(String[] args) { Logger chain = createChain(); // Handled by StdoutLogger (level = 7) chain.message("Entering function y.", Logger.DEBUG); // Handled by StdoutLogger and EmailLogger (level = 5) chain.message("Step1 completed.", Logger.NOTICE); // Handled by all three loggers (level = 3) chain.message("An error has occurred.", Logger.ERR); }}/*The output is: Writing to stdout: Entering function y. Writing to stdout: Step1 completed. Sending via e-mail: Step1 completed. Writing to stdout: An error has occurred. Sending via e-mail: An error has occurred. Sending to stderr: An error has occurred.*/
0 0
- 设计模式——责任链(Chain of Responsibility)
- 设计模式——责任链模式(Chain Of Responsibility)
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- 设计模式(13)——责任链(Chain of Responsibility)
- Java面向对象设计模式(十七)——责任链模式(Chain of Responsibility)
- java设计模式(十六)——责任链模式(Chain of Responsibility)
- java设计模式17——责任链模式(Chain of Responsibility)
- Java设计模式——Chain of Responsibility(责任链)模式
- 设计模式之13 - 责任链模式Chain Of Responsibility
- 浅谈设计模式:责任链模式(Chain Of Responsibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式之---责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式(17)-责任链模式(Chain of Responsibility)
- 设计模式_责任链模式(Chain Of Responsibility)
- [设计模式]责任链模式(Chain of Responsibility)
- HDU_5199
- hbase 访问zookeeper的问题 坑
- 斐波那契数列
- HDU 1010— DFS+奇偶剪枝
- 平衡二叉树
- 设计模式(13)——责任链(Chain of Responsibility)
- 单调栈
- akoj-1148-小光棍数
- 点击界面产生气泡,气泡效果~
- 阿里巴巴2015基础平台研发工程师实习生笔试卷
- OJ题——狐狸算卦
- Jquery基础之DOM操作
- SSH项目整合——XML文档流
- OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置