標籤:style blog http color java os 2014 ar
要開發新的遊戲了,必須要經過各個層級的老大進行對項目的風險性研究等,這裡寫了個責任鏈,好像很牽強
主要涉及三個角色:項目製作人,專案經理,老闆
////// 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的類圖。
應用場合:用戶端不需要知道誰來處理這個請求,有系統內部自己去通過鏈狀進行對責任的指派,知道結束