职责链模式
来源:互联网 发布:网络理财被骗怎么办 编辑:程序博客网 时间:2024/04/29 16:07
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象练成一个链,并沿着这个链传递该请求,直到有一个对象处理它为止。
抽象实例
Handler.java
package zx.chainofresponsibility.test1;/** * 处理器类 * @author Carl_Hugo */public abstract class Handler { protected Handler successor; //设置继任者 public void setSuccessor(Handler successor){ this.successor=successor; } //处理请求 public abstract void HandlerRequest(int request);}class ConcreteHandler1 extends Handler{ @Override public void HandlerRequest(int request) { if(request>=0&&request<10){ System.out.println(this.getClass().getSimpleName()+"处理请求"+request); //当无法处理时就判断是否存在继任者,存在就让继任者处理请求 }else if(successor!=null){ successor.HandlerRequest(request); } }}class ConcreteHandler2 extends Handler{ @Override public void HandlerRequest(int request) { if(request>=10&&request<20){ System.out.println(this.getClass().getSimpleName()+"处理请求"+request); }else if(successor!=null){ successor.HandlerRequest(request); } }}class ConcreteHandler3 extends Handler{ @Override public void HandlerRequest(int request) { if(request>=20&&request<30){ System.out.println(this.getClass().getSimpleName()+"处理请求"+request); }else if(successor!=null){ successor.HandlerRequest(request); } }}
Test.java
package zx.chainofresponsibility.test1;public class Test { public static void main(String[] args) { ConcreteHandler1 h1 = new ConcreteHandler1(); ConcreteHandler2 h2 = new ConcreteHandler2(); ConcreteHandler3 h3 = new ConcreteHandler3(); h1.setSuccessor(h2); h2.setSuccessor(h3); int[] request={2,5,14,22,18,3,27,20}; for(int i:request){ h1.HandlerRequest(i); } }}
具体实例
Request.java
public class Request { //申请类型 private String requestType; //申请内容 private String requestContent; //数量 private int number; public String getRequestType() { return requestType; } public void setRequestType(String requestType) { this.requestType = requestType; } public String getRequestContent() { return requestContent; } public void setRequestContent(String requestContent) { this.requestContent = requestContent; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; }}
Manager.java
public abstract class Manager { protected String name; //上级 protected Manager superier; public Manager(String name){ this.name=name; } //设置管理者的上级 public void setSuperior(Manager superier){ this.superier=superier; } //申请请求 public abstract void requestApplications(Request request);}class CommonManager extends Manager{ public CommonManager(String name) { super(name); } @Override public void requestApplications(Request request) { if("请假".equals(request.getRequestType())&&request.getNumber()<=2){ System.out.println(name+":"+request.getRequestType()+"" + " 数量"+request.getNumber()+" 被批准"); }else if(superier!=null){ superier.requestApplications(request); } }}class Majordomo extends Manager{ public Majordomo(String name) { super(name); } @Override public void requestApplications(Request request) { if("请假".equals(request.getRequestType())&&request.getNumber()<=5){ System.out.println(name+":"+request.getRequestType()+"" + " 数量"+request.getNumber()+" 被批准"); }else if(superier!=null){ superier.requestApplications(request); } }}class GeneralManager extends Manager{ public GeneralManager(String name) { super(name); } @Override public void requestApplications(Request request) { if("请假".equals(request.getRequestType())){ System.out.println(name+":"+request.getRequestType()+"" + " 数量"+request.getNumber()+" 被批准"); }else if("加薪".equals(request.getRequestType())&&request.getNumber()<=500){ System.out.println(name+":"+request.getRequestType()+"" + " 数量"+request.getNumber()+" 被批准"); }else if("加薪".equals(request.getRequestType())&&request.getNumber()>500){ System.out.println(name+":"+request.getRequestType()+"" + " 数量"+request.getNumber()+" 再说吧!"); } }}
Test.java
public class Test { public static void main(String[] args) { CommonManager commonManager = new CommonManager("经理"); Majordomo manjordomo = new Majordomo("总监"); GeneralManager generalManager = new GeneralManager("总经理"); commonManager.setSuperior(manjordomo); manjordomo.setSuperior(generalManager); Request request = new Request(); request.setRequestType("请假"); request.setRequestContent("小菜请假"); request.setNumber(1); commonManager.requestApplications(request); Request request2 = new Request(); request2.setRequestType("请假"); request2.setRequestContent("小明请假"); request2.setNumber(4); commonManager.requestApplications(request2); Request request3 = new Request(); request3.setRequestType("加薪"); request3.setRequestContent("小菜请求加薪"); request3.setNumber(500); commonManager.requestApplications(request3); Request request4 = new Request(); request4.setRequestType("加薪"); request4.setRequestContent("小菜请求加薪"); request4.setNumber(1000); commonManager.requestApplications(request4); }}
输出
0 0
- 职责链设计模式
- 职责链模式
- 职责链模式
- 职责链模式
- ChainOfResponsibility(职责链)模式
- 职责链模式ChainOfResponsibility
- 职责链模式
- 职责链模式 ResponsibilityChainPattern
- 【设计模式】职责链
- 职责链模式
- java职责链模式
- 职责链模式
- 职责链模式
- 职责链模式(python)
- 职责链模式
- 职责链模式
- 职责链模式
- 职责链模式
- 粉丝经济大爆发居然真的来了
- 基于vue1.0开发的移动端H5积分商城项目
- mysql索引 mysql中select 查询条件随谈
- 17. Letter Combinations of a Phone Number -Medium
- nginx,配置http和https共存
- 职责链模式
- 欢迎使用CSDN-markdown编辑器
- 图像质量的客观评估指标PSNR与SSIM
- 史上最全的互联网思维精髓总结
- Hive的安装及配置
- 待解决的事情
- 1018: 算法提高 乘法运算
- oj2027: 求三角形面积
- 【Python】系列简记--28 文件操作