1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:問題類型 6 * 時間:2016年3月1日上午9:59:18 7 * 作者:cutter_point 8 */ 9 public enum Ques
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:問題類型 6 * 時間:2016年3月1日上午9:59:18 7 * 作者:cutter_point 8 */ 9 public enum QuestionType 10 { 11 HARD, MIDDLE, EASY 12 }
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:問題類,有問題類型 6 * 時間:2016年3月1日上午9:54:23 7 * 作者:cutter_point 8 */ 9 public class Question 10 { 11 private QuestionType qt; 12 //構造 13 public Question(QuestionType qtt) 14 { 15 this.qt = qtt; 16 } 17 public QuestionType getQt() 18 { 19 return qt; 20 } 21 public void setQt(QuestionType qt) 22 { 23 this.qt = qt; 24 } 25 26 }
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:處理問題的人物的抽象類 6 * 時間:2016年3月1日上午10:02:04 7 * 作者:cutter_point 8 */ 9 public abstract class HandleQuestioner 10 { 11 //後繼的責任對象 12 protected HandleQuestioner hqr; 13 14 public void setHandleQurstioner(HandleQuestioner hqr) 15 { 16 this.hqr = hqr; 17 } 18 19 public HandleQuestioner getHandleQurstioner() 20 { 21 return hqr; 22 } 23 24 //處理問題 25 public abstract void handleQuestion(Question q); 26 27 }
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:同事 6 * 時間:2016年3月1日上午10:04:50 7 * 作者:cutter_point 8 */ 9 public class Colleague extends HandleQuestioner 10 { 11 12 //處理方法 13 @Override 14 public void handleQuestion(Question q) 15 { 16 if(q.getQt() == QuestionType.EASY) 17 { 18 System.out.println("同事可以完美處理"); 19 } 20 else 21 { 22 System.out.print("同事無法處理\t"); 23 if(this.getHandleQurstioner() != null) 24 this.getHandleQurstioner().handleQuestion(q); //交給上級處理 25 } 26 } 27 28 }
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:老大 6 * 時間:2016年3月1日上午10:10:10 7 * 作者:cutter_point 8 */ 9 public class Boss extends Colleague 10 { 11 //處理方法 12 @Override 13 public void handleQuestion(Question q) 14 { 15 if(q.getQt() == QuestionType.MIDDLE) 16 { 17 System.out.println("老大可以完美處理"); 18 } 19 else 20 { 21 System.out.print("老大無法處理\t"); 22 if(this.getHandleQurstioner() != null) 23 this.getHandleQurstioner().handleQuestion(q); //交給上級處理 24 } 25 } 26 }
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:技術總監 6 * 時間:2016年3月1日上午10:11:35 7 * 作者:cutter_point 8 */ 9 public class TechnicalDirector extends HandleQuestioner 10 { 11 12 @Override 13 public void handleQuestion(Question q) 14 { 15 if(q.getQt() == QuestionType.HARD) 16 { 17 System.out.println("技術總監完美處理"); 18 } 19 else 20 { 21 System.out.print("技術總監無法處理\t"); 22 if(this.getHandleQurstioner() != null) 23 this.getHandleQurstioner().handleQuestion(q); //上級處理 24 } 25 } 26 27 }
測試代碼:
1 package com.shejimoshi.behavioral.ChainOfResponsibility; 2 3 4 /** 5 * 功能:責任鏈模式 6 * 使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿著這條鏈傳遞請求,直到有一個對象處理它為止 7 * 適用:有多個的對象可以處理一個請求,那個對象處理該請求運行時刻自動確定 8 * 你想在不明確指定接收者的情況下,想多個對象的一個提交一個請求 9 * 可處理一個請求的對象集合應被動態指定 10 * 時間:2016年3月1日上午9:33:24 11 * 作者:cutter_point 12 */ 13 public class Test 14 { 15 public static void main(String[] args) 16 { 17 //簡單題 18 Question qq1 = new Question(QuestionType.EASY); 19 //中等問題 20 Question qq2 = new Question(QuestionType.MIDDLE); 21 //難題 22 Question qq3 = new Question(QuestionType.HARD); 23 HandleQuestioner colleague = new Colleague(); 24 HandleQuestioner boss = new Boss(); 25 HandleQuestioner technicalDirector = new TechnicalDirector(); 26 colleague.setHandleQurstioner(boss); 27 boss.setHandleQurstioner(technicalDirector); 28 29 colleague.handleQuestion(qq1); 30 colleague.handleQuestion(qq2); 31 colleague.handleQuestion(qq3); 32 } 33 }
顯示結果:
同事可以完美處理 同事無法處理 老大可以完美處理 同事無法處理 老大無法處理 技術總監完美處理