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

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

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

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

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

posted @ 2014-08-07 17:21  p_towin  阅读(534)  评论(0编辑  收藏  举报