여섯 가지 상용 디자인 모델 자바 실현 (3) 책임 체인 모델

12767 단어 디자인 모드
이 책임 체인 모델 은 사실 이전에 쓴 정시 임무 에서 도 사 용 된 적 이 있다.사실은 책임 체인 모델 은 워 크 플 로 와 매우 비슷 하 다. 한 작업 은 여러 가지 임무 로 나 뉘 는데 이 작업 을 시작 할 때 이런 임 무 는 설 정 된 순서에 따라 하나씩 집행 된다.웹 의 필터 도 사실 이런 디자인 모델 을 사용 했다.다음은 책임 체인 모델 을 살 펴 보 자.
기본 개념
책임 체인 모델 은 대상 의 행위 모델 이다.책임 체인 모델 에서 많은 대상 이 모든 대상 이 다음 집에 대한 인용 으로 연결 되 어 하나의 체인 을 형성한다.체인 의 한 대상 이 이 요청 을 처리 하기 로 결정 할 때 까지 이 체인 에 전달 해 달라 고 요청 합 니 다.이 요청 을 보 낸 클 라 이언 트 는 체인 의 어느 대상 이 이 요청 을 최종 적 으로 처리 하 는 지 모 르 기 때문에 시스템 은 클 라 이언 트 에 영향 을 주지 않 는 상황 에서 동적 으로 책임 을 재 구성 하고 분배 할 수 있다.
구조
추상 처리 자 (Handler) 역할: 요청 을 처리 하 는 인 터 페 이 스 를 정의 합 니 다.필요 하 다 면 인 터 페 이 스 는 다음 인용 을 설정 하고 되 돌려 주 는 방법 을 정의 할 수 있 습 니 다.이 역할 은 보통 자바 추상 류 나 자바 인터페이스 에서 이 루어 진다.위의 그림 에서 Handler 류 의 집합 관 계 는 구체 적 인 하위 클래스 가 다음 집에 대한 인용 을 제 시 했 고 추상 적 인 방법 인 handle Request () 는 하위 클래스 처리 요청 의 조작 을 규범화 시 켰 다.구체 적 인 처리 자 (ConcreteHandler) 역할: 구체 적 인 처리 자 는 요청 을 받 은 후 요청 을 처리 하거나 다음 집에 전달 할 수 있 습 니 다.구체 적 인 처리 자 는 다음 집에 대한 인용 을 가지 고 있 기 때문에 필요 하 다 면 구체 적 인 처리 자 는 다음 집 을 방문 할 수 있다.
3. 코드 구현
우선, 추상 적 인 처리 자 역할 클래스 를 만 듭 니 다.
package org.wuqiong.designpattern.chainofResponsibility;
/**
 * ClassName:Handler 
* Function: .
* Date: 2016 1 29 3:08:40
* @author qiyongkang * @version * @since JDK 1.6 * @see */
public abstract class Handler { /** * */ protected Handler successor = null; /** * */ public Handler getSuccessor() { return successor; } /** * */ public void setSuccessor(Handler successor) { this.successor = successor; } /** * * @param user * @param fee * @return */ public abstract String handleFeeRequest(String user , double fee); }

그리고 세 가지 구체 적 인 처리 역할 유형 을 준비 합 니 다. 프로젝트 매니저 입 니 다.
package org.wuqiong.designpattern.chainofResponsibility;

/**
 * ClassName:ProjectManager 
* Function: - .
* Date: 2016 1 29 3:11:30
* * @author qiyongkang * @version * @since JDK 1.6 * @see */
public class ProjectManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; // , 500 if (fee < 500) { // , , if (" ".equals(user)) { str = " : 【" + user + "】 , " + fee + " "; } else { // str = " : 【" + user + "】 , " + fee + " "; } } else { // 500, if (getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }

부분 경리
package org.wuqiong.designpattern.chainofResponsibility;

/**
 * ClassName:DeptManager 
* Function: -
* Date: 2016 1 29 3:14:41
* * @author qiyongkang * @version * @since JDK 1.6 * @see */
public class DeptManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; // 1000 if (fee < 1000) { // , , if (" ".equals(user)) { str = " : 【" + user + "】 , " + fee + " "; } else { // str = " : 【" + user + "】 , " + fee + " "; } } else { // 1000, if (getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }

총지배인
package org.wuqiong.designpattern.chainofResponsibility;

/**
 * ClassName:GeneralManager 
* Function: - .
* Date: 2016 1 29 3:16:02
* * @author qiyongkang * @version * @since JDK 1.6 * @see */
public class GeneralManager extends Handler { @Override public String handleFeeRequest(String user, double fee) { String str = ""; // , , if (fee >= 1000) { // , , if (" ".equals(user)) { str = " : 【" + user + "】 , " + fee + " "; } else { // str = " : 【" + user + "】 , " + fee + " "; } } else { // , if (getSuccessor() != null) { return getSuccessor().handleFeeRequest(user, fee); } } return str; } }

마지막 으로 클 라 이언 트 를 하나 더 준비 해서 구체 적 인 처리 자 를 체인 으로 연결 합 니 다.
package org.wuqiong.designpattern.chainofResponsibility;

/**
 * ClassName:Client 
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON.
* Date: 2016 1 29 3:17:48
* * @author qiyongkang * @version * @since JDK 1.6 * @see */
public class Client { public static void main(String[] args) { // Handler h1 = new GeneralManager(); Handler h2 = new DeptManager(); Handler h3 = new ProjectManager(); h3.setSuccessor(h2); h2.setSuccessor(h1); // String test1 = h3.handleFeeRequest(" ", 300); System.out.println("test1 = " + test1); String test2 = h3.handleFeeRequest(" ", 300); System.out.println("test2 = " + test2); System.out.println("---------------------------------------"); String test3 = h3.handleFeeRequest(" ", 700); System.out.println("test3 = " + test3); String test4 = h3.handleFeeRequest(" ", 700); System.out.println("test4 = " + test4); System.out.println("---------------------------------------"); String test5 = h3.handleFeeRequest(" ", 1500); System.out.println("test5 = " + test5); String test6 = h3.handleFeeRequest(" ", 1500); System.out.println("test6 = " + test6); } }

사실은 책임 체인 이라는 디자인 모델 은 괜 찮 습 니 다. 복잡 한 임 무 를 여러 개의 작은 임무 로 분해 하고 하나씩 수행 하여 프로그램 업무 논 리 를 더욱 명확 하 게 할 수 있 습 니 다.그럼 책임 체인 은 여기까지 입 니 다. 코드 작성 법 을 기억 하 세 요!

좋은 웹페이지 즐겨찾기