设计模式之责任链模式
刚学习了责任链模式,感觉还是蛮不错的,随手记录了下学习的内容。
责任链模式:责任链模式用于弱化请求发生者和请求处理者之间的关系。当多个对象都可以对请求进行处理,但不同的对象能处理的请求类型不同时,可以通过指向另一个对象的引用把这些对象连成一条责任链。当 Client 发出一个请求时,并不知道具体由哪个对象进行处理,它看到的只是一条责任链,将请求直接交给责任链,请求会在责任链中传递,直到找到一个能够进行处理的对象或者遍历结束找不到一个能够处理的对象为止。Java 语言中的异常处理机制就是责任链模式的一个典型应用例子。
下面模拟的是一个员工处理问题层次的责任链模式,不同级别的员工能处理不同级别的请求。
首先设计一个请求类:
主管类:
CEO类:
测试类:package com.design.test.mode.responsibilityChain;public class Main {public static void main(String[] args) {CEO ceo = new CEO(null, "Jack Ceo");Director dir = new Director(ceo, "Sello Director");Manager manager = new Manager(dir, "Fewen Mananger");Request req1 = new Request(4, "我要加薪");Request req2 = new Request(2, "我要请假");Request req3 = new Request(1, "我要加班");System.out.println("处理请求1");manager.processRequest(req1);System.out.println("处理请求2");manager.processRequest(req2);System.out.println("处理请求3");manager.processRequest(req3);}}
打印结果:
处理请求1
Fewen Mananger say: I can't handle the request. My boss will handle it.
Sello Director say: I can't handle the request. My boss will handle it.
Jack Ceo say: I can't handle the request. My boss will handle it.
Nobody can handle the request.我要加薪
处理请求2
Fewen Mananger say: I can't handle the request. My boss will handle it.
Sello Director say: I can handle the request.我要请假
处理请求3
Fewen Mananger say: I can handle the request.我要加班