18.ChainOfResponsibility-职责链模式
来源:互联网 发布:威科姆网络机顶盒 编辑:程序博客网 时间:2024/05/29 13:35
Chain Of Responsibility 职责链模式
职责链模式:
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,
将这个对象连成一条链,并沿着个链传递请求,直到有一个对象处理为止。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。使用场景:
- 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
- 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
- 可动态指定一组对象处理请求。
示例类图:
示例代码:
// Handlerpublic abstract class AbstractLogger { public static final int INFO = 1; public static final int DEBUG = 2; public static final int ERROR = 3; protected int level; // next element in chain or responsibility protected AbstractLogger nextLogger; public void setNextLogger(AbstractLogger nextLogger) { this.nextLogger = nextLogger; } public void logMessage(int level, String message) { if (this.level <= level) { write(message); } if (nextLogger != null) { nextLogger.logMessage(level, message); } } protected abstract void write(String message);}public class ConsoleLogger extends AbstractLogger { public ConsoleLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Standard Console::Logger: " + message); }}public class ErrorLogger extends AbstractLogger { public ErrorLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("Error Console::Logger: " + message); }}public class FileLogger extends AbstractLogger { public FileLogger(int level) { this.level = level; } @Override protected void write(String message) { System.out.println("File::Logger: " + message); }}// 测试public class ChainTest { static AbstractLogger getChainOfLoggers() { AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR); AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG); AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO); errorLogger.setNextLogger(fileLogger); fileLogger.setNextLogger(consoleLogger); return errorLogger; } public static void main(String[] args) { AbstractLogger loggerChain = getChainOfLoggers(); loggerChain.logMessage(AbstractLogger.INFO, "information."); loggerChain.logMessage(AbstractLogger.DEBUG, "debug level information."); loggerChain.logMessage(AbstractLogger.ERROR, "error information."); }}
抽象处理者(Handler)角色:
定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。
这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,
抽象方法 handleRequest()规范了子类处理请求的操作。具体处理者(ConcreteHandler)角色:
具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,
因此,如果需要,具体处理者可以访问下家。优点:
在于可以降低系统的耦合度,简化对象的相互连接,同时增强给对象指派职责的灵活性,增加新的请求处理类也很方便。缺点:
不能保证请求一定被接收,且对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便。
0 0
- 18.ChainOfResponsibility-职责链模式
- 18.ChainOfResponsibility-职责链模式
- ChainOfResponsibility(职责链)模式
- 职责链模式ChainOfResponsibility
- 【设计模式】—— 职责链模式ChainOfResponsibility
- 责任链模式----ChainOfResponsibility
- ChainOfResponsibility--责任链模式
- 责任链模式(ChainOfResponsibility )
- ChainOfResponsibility 模式
- [设计模式]ChainOfResponsibility责任链模式
- 17、责任链模式(ChainofResponsibility)
- 设计模式--ChainofResponsibility 模式
- 行为模式之一---ChainOfResponsibility
- 设计模式之 chainofresponsibility
- 设计模式 ChainOfResponsibility
- 设计模式--责任链模式ChainOfResponsibility(行为型)
- 设计模式之责任链模式(ChainOfResponsibility)&正反顺逆链处理
- 设计模式——责任链(ChainOfResponsibility)学习笔记
- 16.Observer-观察者模式
- 17.Iterator-迭代器模式
- mvc
- 数据结构-----AVL树的旋转操作
- html5本地数据库
- 18.ChainOfResponsibility-职责链模式
- 19.Command-命令模式
- 20.Memento-备忘录模式
- 给View设置selector无效的解决办法。
- HBASE笔记
- Kotlin+Anko 你应该尝试的新Android开发方式
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
- Unity中的DeCoroutine
- 二叉树遍历