java 디자인 모델 - 책임 체인 모델

2738 단어
책임 체인 모델은 대상의 행위 모델이다.여러 대상이 요청을 처리할 수 있는 기회를 주어 요청의 발송자와 수용자의 직접적인 결합 관계를 피한다.이 대상들을 하나의 체인으로 연결해서, 이 체인을 따라 이 요청을 전달하고, 한 대상이 그것을 처리할 때까지.책임 체인 모델은 모든 대상과 하가에 대한 인용으로 하나의 체인을 구성하는 것을 강조하고 이런 방식을 이용하여 발송자와 수신자를 결합시킨다.
책임체인 모델은 이해하기 쉽고 책임체인 모델의 응용 장면도 많다. 예를 들어 OA시스템의 작업 흐름, Struts2의 차단기(Interceptor), servlet의 필터(Filter)
책임 체인은 주로 두 가지 역할로 하나는 추상적인 처리자 역할이고 하나는 구체적인 처리자 역할이다.추상 처리자는 요청 방법과 연결된 대상 인용을 정의합니다.구체적인 처리자는 현재 청구가 자신의 처리 요구에 부합되는지 판단하고, 처리할 수 없으면 하가에 맡긴다.
이렇게 하면 우리는 테스트를 할 때 추상 처리자 중의 대상의set 방법을 이용하여 구체적인 대상을 연결한다.그런 다음 적절한 매개 변수를 입력하면 됩니다.위 코드:
추상 처리 대상, 구체적인 대상을 정의하고 getset 방법을 설정하며 요청을 받는 방법을 정의합니다.
package chain;

public abstract class Handler {
	private Handler seccessor;
	public abstract void handlerQequest(String condition);
	public Handler getSeccessor() {
		return seccessor;
	}
	public void setSeccessor(Handler seccessor) {
		this.seccessor = seccessor;
	}

}

구체적인 처리 대상1:
package chain;

public class ConcreteHandler1 extends Handler{

	@Override
	public void handlerQequest(String condition) {
		if(condition.equals("ConcreteHandler1")){
			System.out.println("   1  ....");
		}else{
			System.out.println("   1   ...");
			//          
			getSeccessor().handlerQequest(condition);
		}
	}

}

구체적인 처리 대상 2:
package chain;

public class ConcreteHandler2 extends Handler{

	@Override
	public void handlerQequest(String condition) {
		if(condition.equals("ConcreteHandler2")){
			System.out.println("   2  ...");
		}else{
			System.out.println("   2   ...");
			getSeccessor().handlerQequest(condition);
		}
	}

}

특정 객체 N:
package chain;

public class ConcreteHandlerN extends Handler{

	@Override
	public void handlerQequest(String condition) {
		System.out.println("   N  ...");
	}

}

테스트: (모든 처리 대상을 연결)
package chain;

public class Test {
	public static void main(String[] args) {
		Handler handler1 =new ConcreteHandler1();
		Handler handler2=new ConcreteHandler2();
		Handler handlerN=new ConcreteHandlerN();
		//   
		handler1.setSeccessor(handler2);
		handler2.setSeccessor(handlerN);
		//        1、2   
		handler1.handlerQequest("     ");
	}

}

결과:
   1   ...
   2   ...
   N  ...

좋은 웹페이지 즐겨찾기