要开发新的游戏了,必须要经过各个级别的老大进行对项目的风险性研究等,这里写了个责任链,好像很牵强
主要涉及三个角色:项目制作人,项目经理,老板
// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Handler.java // @ Date : 2014/8/7 // @ Author : // // public abstract class Handler { public Handler successor; public void HandleRequest(String projectName, String applyName) { } }
// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : ConcreteHandler.java // @ Date : 2014/8/7 // @ Author : // // public class TeamLeaderHandler extends Handler { @Override public void HandleRequest(String projectName, String applyName) { // TODO Auto-generated method stub super.HandleRequest(projectName, applyName); if(applyName.equals("神灵武士") && projectName.equals("dota传奇")) { System.out.println("制作人同意了" + applyName +" : 对 " + projectName +"的申请"); if(successor!=null) { System.out.println("制作人在向上级申请"); successor.HandleRequest(projectName, applyName); } else { System.out.println("制作人同意了案子了,开始做"); } } else { System.out.println("制作人否了案子,原因不详"); } } }
public class TeamManagerHandler extends Handler { @Override public void HandleRequest(String projectName, String applyName) { // TODO Auto-generated method stub super.HandleRequest(projectName, applyName); if(applyName.equals("神灵武士") && projectName.equals("dota传奇")) { System.out.println("项目经理同意了" + applyName +" : 对 " + projectName +"的申请"); if(successor!=null) { System.out.println("项目经理在向上级申请"); successor.HandleRequest(projectName, applyName); } else { System.out.println("项目经理同意了案子了,开始做"); } } else { System.out.println("项目经理否了案子,原因不详"); } } }
public class BossHandler extends Handler { @Override public void HandleRequest(String projectName, String applyName) { // TODO Auto-generated method stub super.HandleRequest(projectName, applyName); if(applyName.equals("神灵武士") && projectName.equals("dota传奇")) { System.out.println("老板同意了" + applyName +" : 对 " + projectName +"的申请"); if(successor!=null) { System.out.println("项目经理在向上级申请"); successor.HandleRequest(projectName, applyName); } else { System.out.println("老板同意了案子了,开始做"); } } else { System.out.println("项目经理否了案子,原因不详"); } } }
public class BossHandler extends Handler { @Override public void HandleRequest(String projectName, String applyName) { // TODO Auto-generated method stub super.HandleRequest(projectName, applyName); if(applyName.equals("神灵武士") && projectName.equals("dota传奇")) { System.out.println("老板同意了" + applyName +" : 对 " + projectName +"的申请"); if(successor!=null) { System.out.println("项目经理在向上级申请"); successor.HandleRequest(projectName, applyName); } else { System.out.println("老板同意了案子了,开始做"); } } else { System.out.println("项目经理否了案子,原因不详"); } } }
// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Client.java // @ Date : 2014/8/7 // @ Author : // // public class Client { public static void main(String[] args) { TeamLeaderHandler teamLeader = new TeamLeaderHandler(); TeamManagerHandler manager = new TeamManagerHandler(); BossHandler boss = new BossHandler(); teamLeader.successor = manager; manager.successor = boss; teamLeader.HandleRequest("dota传奇", "神灵武士"); } }
制作人同意了神灵武士 : 对 dota传奇的申请
制作人在向上级申请
项目经理同意了神灵武士 : 对 dota传奇的申请
项目经理在向上级申请
老板同意了神灵武士 : 对 dota传奇的申请
老板同意了案子了,开始做
总结:其实责任链模式是非常简单的模式,在对象之间只需要保留下一个负责任的人的引用即可,下面就是GOF的类图。
应用场合:客户端不需要知道谁来处理这个请求,有系统内部自己去通过链状进行对责任的分派,知道结束
责任链模式之开发新游戏的审批过程,布布扣,bubuko.com
原文:http://www.cnblogs.com/ptowin/p/3897675.html