디자인 모델 의 Chain of Responsibility 모델 학습 (책임 체인 모델)

어떤 큰 글 을 참조 하 십시오.
디자인 모드
대상 개발 자 들 은 대상 간 의 책임 을 명확 하고 줄 여 대상 간 의 결합 절 차 를 낮 추 기 를 원한 다.이렇게 하면 우리 의 시스템 은 더욱 쉽게 수정 되 는 동시에 결함 이 발생 하 는 위험 도 낮 출 수 있다.어느 정도 자바 언어 자 체 는 대상 간 의 결합 도 를 낮 추 는 데 도움 을 줄 수 있다.클 라 이언 트 는 대상 의 인터페이스 에 만 접근 할 수 있 을 뿐 구체 적 인 세부 사항 과 는 관계 가 없다.인터페이스 라 는 방식 을 빌려 클 라 이언 트 는 방법의 기능 만 알 면 된다.만약 에 우리 가 특정한 차원 구조 에 따라 조직 을 한다 면 예 를 들 어 조직 을 책임 체인 으로 한다 면 클 라 이언 트 코드 는 자신 이 어떤 종 류 를 사용 할 지 미리 알 필요 가 없 을 것 이다.이러한 상황 에서 체인 의 모든 대상 은 방법 이 있 습 니 다. 클 라 이언 트 코드 가 이 방법 을 호출 할 때 이 대상 들 은 이 방법 을 실행 하거나 이 체인 을 따라 이 방법 으로 요청 을 전달 합 니 다.
 
Chain of Responsibility 모드 는 모든 대상 이 요청 을 처리 할 지 여 부 를 결정 할 수 있 는 기 회 를 제공 하여 요청 한 발송 자 와 수신 자 간 의 결합 을 피 할 수 있 습 니 다.
 
 
예:
 
      한 번 은 내 가 회사 에 가서 차 표를 청구 한 적 이 있 는데, 동 료 는 나 에 게 15 층 에 있다 고 만 말 했 지만, 구체 적 으로 어디 에 있 는 지 그 도 잘 몰 랐 다.그래서 저 는 15 층 에 올 라 가서 문 에 들 어서 자마자 15 프런트 에 물 어 봤 습 니 다. 프런트 MM 은 그녀 도 잘 모른다 고 했 습 니 다. 옆 에 있 는 보험 팀 에 게 물 어 봐 도 됩 니 다. 보험 팀 은 우리 회사 의 보험 배상 청 구 를 맡 았 고 다른 차비 도 잘 모 릅 니 다.그래서 그 는 우리 에 게 계속 앞으로 가서 복지 팀 에 게 물 었 다. 복지 팀 이 알 고 재무 팀 의 결산 을 알 아야 한다 고 말 했다. 장 소 는 바로 내 뒤에 있다.그래서 나 는 걸 어가 서 표를 작성 하고 차 표를 내 고 갔다.
 
이 일 은 간단 해 보이 지만 사실은 하나의 책임 체인 모델 로 모든 구성원 팀 은 자신의 범위 내의 업무 만 책임 진다.범위 밖의 업무 내용 에 대해 서 는 전혀 모 르 거나 조금 만 알 수 있 습 니 다.그래서 당신 이 보험 팀 을 찾 았 을 때, 그 는 차표 가 그의 업무 범위 내 에 있 는 것 이 아니 라 는 것 을 보 았 다.그 는 너 를 옆 에 있 는 복지 팀 에 소개 할 것 이다.다음은 코드 로 그들 을 설명 합 시다.
먼저 요청 클래스 를 정의 합 니 다. 이 요청 클래스 는 바로 제 가 차 표를 청산 해 야 한 다 는 것 입 니 다.
 
1. interface 핸들 (다른 사무 처리)
package com.xuyi.responsibility;

public interface Handle {
	public void handleRequest(Request request);
}

 2. 세 부서 가 서로 다른 업 무 를 처리한다.
HandleBoon.java
package com.xuyi.responsibility;

/**
 *    
 * @author xuyi
 *
 */
public class HandleBoon implements Handle {

	private Handle otherHandle;
	
	
	public void setOtherHandle(Handle otherHandle) {
		this.otherHandle = otherHandle;
	}


	public void handleRequest(Request request) {
		System.out.println("     ");
		
		if(request.getType().equals("  ")){
			System.out.println("        ");
			request.setFinished(true);
		}else{
			if(otherHandle!=null&&!request.isFinished())
				otherHandle.handleRequest(request);
		}
	}

}

 HandleInsure.java
package com.xuyi.responsibility;

/**
 *    
 * @author xuyi
 *
 */
public class HandleInsure implements Handle {

	private Handle otherHandle;
	
	
	public void setOtherHandle(Handle otherHandle) {
		this.otherHandle = otherHandle;
	}


	public void handleRequest(Request request) {
		System.out.println("     ");
		
		if(request.getType().equals("  ")){
			System.out.println("        ");
			request.setFinished(true);
		}else{
			if(otherHandle!=null&&!request.isFinished())
				otherHandle.handleRequest(request);
		}
	}

}

 HandleFinance.java
package com.xuyi.responsibility;

/**
 *    
 * @author xuyi
 *
 */
public class HandleFinance implements Handle {

	private Handle otherHandle;
	
	
	public void setOtherHandle(Handle otherHandle) {
		this.otherHandle = otherHandle;
	}


	public void handleRequest(Request request) {
		System.out.println("     ");
		
		if(request.getType().equals("  ")){
			System.out.println("        ");
			request.setFinished(true);
		}else{
			if(otherHandle!=null&&!request.isFinished())
				otherHandle.handleRequest(request);
		}
	}

}
 
3. 보 낸 요청
Request.java
package com.xuyi.responsibility;

/**
 *     
 * @author xuyi
 *
 */
public class Request {
	
	private String type;
	
	private boolean finished;

	public boolean isFinished() {
		return finished;
	}

	public void setFinished(boolean finished) {
		this.finished = finished;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	
	
	
}

 4.Test.java
package com.xuyi.responsibility;

//Chain of Responsibility  (     )
public class Test {

	public static void main(String[] args) {
		HandleBoon handleBoon = new HandleBoon();
		HandleInsure handleInsure = new HandleInsure();
		HandleFinance handleFinance = new HandleFinance();
		//    
		handleBoon.setOtherHandle(handleInsure);
		handleInsure.setOtherHandle(handleFinance);
		
		//    
		Request request = new Request();
		request.setType("  ");
		
		handleBoon.handleRequest(request);
		
	}
	
}

좋은 웹페이지 즐겨찾기