首页 > 代码库 > 责任链模式之开发新游戏的审批过程

责任链模式之开发新游戏的审批过程

要开发新的游戏了,必须要经过各个级别的老大进行对项目的风险性研究等,这里写了个责任链,好像很牵强

主要涉及三个角色:项目制作人,项目经理,老板

//////  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的类图。

应用场合:客户端不需要知道谁来处理这个请求,有系统内部自己去通过链状进行对责任的分派,知道结束