여섯 가지 상용 디자인 모델 자바 실현 (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);
}
}
사실은 책임 체인 이라는 디자인 모델 은 괜 찮 습 니 다. 복잡 한 임 무 를 여러 개의 작은 임무 로 분해 하고 하나씩 수행 하여 프로그램 업무 논 리 를 더욱 명확 하 게 할 수 있 습 니 다.그럼 책임 체인 은 여기까지 입 니 다. 코드 작성 법 을 기억 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.