Java23种设计模式
开始之前举一个例子:
小明为公司普通员工,现在有事情需要请假,公司领导层分为:老板、经理、主管。其中主管可以审批一天以内的假,经理可以审批三天以内的假,超过三天的假必须找老板审批。公司能跟普通员工直接工作交接的只有主管,不存在跨级工作交接的情况。
实现该功能需要四个对象:小明、主管、经理、老板。其中主管、经理、老板在这个事件中有审批的动作,小明有提交申请的动作。那么实现代码如下:
public class Company {
public static void main(String[] args){
new Company();
}
public Company(){
XiaoMing xiaoMing = new XiaoMing();
System.out.print(xiaoMing.leave()?"批准":"未批准");
}
class XiaoMing{
int days = 10;
boolean leave(){
return new ZhuGuan().isLeave(days);
}
}
interface Leave{
boolean isLeave(int days);
}
class ZhuGuan implements Leave{
@Override
public boolean isLeave(int days) {
if(days<=1) return true;
return new JingLi().isLeave(days);
}
}
class JingLi implements Leave{
@Override
public boolean isLeave(int days) {
if(days<=3) return true;
return new Boss().isLeave(days);
}
}
class Boss implements Leave{
@Override
public boolean isLeave(int days) {
if(days<7) return true;
return false;
}
}
}
执行结果为:
未批准
这个例子是一个典型的责任链模式的例子,这其中必备条件有:
- 请求发起者:小明
- 责任链公共意图:审批
- 一个请求者,多个责任人:主管、经理、老板…
- 请求发起者不需要关心最终责任人是谁,只需要知道处理结果。
定义:
责任链模式为请求者提供一个接收者链,请求者不需要关心是谁处理了请求,实现请求者和处理事件的接收者之间的解耦。
使用场景:
1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。
2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3、可动态指定一组对象处理请求。