职责链模式-B

来源:互联网 发布:国民党抗战电影 知乎 编辑:程序博客网 时间:2024/05/20 16:41

职责链模式实践


背景:

某公司内部规定,经理负责请假事务,员工最多可以请假3天;总监负责加薪事务,员工加薪不超过1000;现在某员工需要请假、加薪,通过职责链实现。

UML

      

代码

Request

package weic.om;public class Request{//申请类别--请假-加薪private String Type;//申请内容private String content;//申请数量private int numbers;public String getType(){return Type;}public void setType(String type){Type = type;}public String getContent(){return content;}public void setContent(String content){this.content = content;}public int getNumbers(){return numbers;}public void setNumbers(int numbers){this.numbers = numbers;}}

Manager

package weic.om;public class Manager{//管理者名字protected String name;public Manager(String name){this.name = name;}//设置上级---链protected Manager Superior;public void setSuperior(Manager Superior){this.Superior = Superior;}//申请请求处理public  void  RequestApplications(Request request){}}

Commonmanager

package weic.om;//经理public class Commonmanager extends Manager{public Commonmanager(String name){super(name);}//申请请求处理//经理处理---请假 数目<2public  void  RequestApplications(Request request){if(request.getType().equals("请假") && request.getNumbers()<=3){System.out.println(this.name+": "+request.getContent()+request.getNumbers()+"天"+" 被批准");}else if(request.getType().equals("请假") && request.getNumbers()>3){System.out.println(this.name+": "+request.getContent()+request.getNumbers()+"天"+" 不批准");}else if (Superior != null) {Superior.RequestApplications(request);}}}


Majordomo

package weic.om;//总监public class Majordomo extends Manager {public Majordomo(String name){super(name);}//申请请求处理//总监处理---请假 数目>5 + 加薪<1000  public  void  RequestApplications(Request request){if(request.getType().equals("加薪") &&  request.getNumbers()<1000 ){System.out.println(this.name+": "+request.getContent()+" 涨薪"+request.getNumbers()+" 被批准");}else if(request.getType().equals("加薪")){System.out.println(this.name+": "+request.getContent()+" 涨薪"+request.getNumbers()+" 以后再说");}else {System.out.println(this.name+": "+request.getContent()+" 数目"+request.getNumbers()+" 这事我做不了主");}}}
Client

package weic.om;public class Client{public static void main(String[] args){//级别从低到高  经理->总监Manager jinli = new Commonmanager("金立");Manager zongjian = new Majordomo("宗间");jinli.setSuperior(zongjian);//设置链Request request1 = new Request();request1.setType("请假");request1.setContent("张三请假");request1.setNumbers(1);jinli.RequestApplications(request1);Request request2 = new Request();request2.setType("请假");request2.setContent("李四请假");request2.setNumbers(3);jinli.RequestApplications(request2);Request request3 = new Request();request3.setType("加薪");request3.setContent("王五想加薪");request3.setNumbers(3000);jinli.RequestApplications(request3);Request request4 = new Request();request4.setType("晋升");request4.setContent("sun想晋升");request4.setNumbers(1);jinli.RequestApplications(request4);}}

结果:






0 0
原创粉丝点击