JAVA 책임 체인 모델

말 그대로 책임 체인 모드(Chain of Responsibility Pattern)는 수신 자 대상 의 체인 을 만 들 었 습 니 다.이 모드 는 요청 한 형식 으로 요청 한 발송 자 와 수신 자 를 결합 합 니 다.이런 유형의 디자인 모델 은 행위 형 모델 에 속한다.
이런 모드 에 서 는 일반적으로 모든 수신 자가 다른 수신 자 에 대한 인용 을 포함한다.대상 이 이 요청 을 처리 하지 못 하면 같은 요청 을 다음 수신 자 에 게 전달 합 니 다.
소개 하 다.
의도:
요청 발송 자 와 수신 자가 결합 하 는 것 을 피하 고 여러 대상 이 요청 을 받 을 수 있 도록 합 니 다.이 대상 을 하나의 체인 으로 연결 하고 이 체인 을 따라 요청 을 전달 합 니 다.대상 이 처리 할 때 까지.
주요 해결:
직책 체인 의 처리 자 는 요 구 를 처리 하 는 것 을 책임 집 니 다.고객 은 요 구 를 직책 체인 에 보 내 면 됩 니 다.요청 의 처리 세부 사항 과 요청 의 전달 에 관심 을 가 질 필요 가 없 기 때문에 직책 체인 은 요 구 된 발송 자 와 요 구 된 처리 자 를 결합 시 켰 습 니 다.
언제 사용 할 지:
메 시 지 를 처리 할 때 많은 길 을 걸 러 냅 니 다.
어떻게 해결 합 니까?
차단 하 는 종 류 는 모두 통 일 된 인 터 페 이 스 를 실현 한다.
키 코드:
Handler 에 서 는 자신 을 모 아 Handler Request 에서 적합 한 지 판단 하고,조건 에 미 달 하면 아래로 전달 하 며,누구 에 게 전달 하기 전에 set 로 들 어 갑 니 다.
인 스 턴 스 적용:
1.홍루몽 의'북 치고 꽃 을 전하 다'.
2,JS 의 사건 거품.
3.JAVA WEB 에서 Apache Tomcat 가 Encoding 에 대한 처리,Struts 2 의 차단기,jsp servlet 의 Filter.
장점:
1.결합 도 를 낮 춘 다.그것 은 요청 한 발송 자 와 수신 자 를 결합 시 킵 니 다.
2.대상 을 간소화 했다.대상 이 체인 의 구 조 를 알 필요 가 없 게 하 다.
3.대상 에 게 직책 을 할당 하 는 유연성 을 강화한다.체인 안의 구성원 을 바 꾸 거나 순 서 를 바 꾸 어 동적 으로 책임 을 추가 하거나 삭제 할 수 있 습 니 다.
4.새로운 요청 처리 류 를 추가 하 는 것 이 편리 합 니 다.
단점:
1.요청 이 반드시 수락 될 것 이 라 고 장담 할 수 없습니다.
2.시스템 성능 은 일정한 영향 을 받 을 것 이 고 코드 디 버 깅 을 할 때 불편 하여 순환 호출 을 초래 할 수 있 습 니 다.
3.운행 시의 특징 을 관찰 하기 가 쉽 지 않 고 오류 제거 에 방해 가 될 수 있 습 니 다.
사용 필드:
1.여러 대상 이 같은 요 구 를 처리 할 수 있 습 니 다.구체 적 으로 어떤 대상 이 이 요 구 를 처리 하 는 지 는 실행 시간 에 자동 으로 확 정 됩 니 다.
2.수신 자 를 명확 하 게 지정 하지 않 은 상태 에서 여러 대상 중 하나 에 게 요청 을 제출 합 니 다.
3.대상 처리 요청 을 동적 으로 지정 할 수 있 습 니 다.
주의사항:
JAVA WEB 에서 많은 앱 을 만 났 습 니 다.
이루어지다
추상 적 인 클래스 AbstractLogger 를 만 듭 니 다.자세 한 로그 기록 단 계 를 가지 고 있 습 니 다.그리고 우 리 는 세 가지 유형의 기록 기 를 만 들 었 는데 모두 AbstractLogger 를 확장 했다.각 기록 기 메시지 의 단 계 는 자신의 단계 에 속 하 는 지,만약 에 해당 하 는 단계 에 속 하 는 지,그렇지 않 으 면 인쇄 하지 않 고 다음 기록 기 에 메 시 지 를 전달 합 니 다.

단계 1
추상 적 인 기록 기 류 를 만 듭 니 다.

public abstract class AbstractLogger {
  public static int INFO = 1;
  public static int DEBUG = 2;
  public static int ERROR = 3;
 
  protected int level;
 
  //          
  protected AbstractLogger nextLogger;
 
  public void setNextLogger(AbstractLogger nextLogger){
   this.nextLogger = nextLogger;
  }
 
  public void logMessage(int level, String message){
   if(this.level <= level){
     write(message);
   }
   if(nextLogger !=null){
     nextLogger.logMessage(level, message);
   }
  }
 
  abstract protected void write(String message);
  
}
단계 2
이 기록 기 류 를 확장 하 는 실체 클래스 를 만 듭 니 다.

public class ConsoleLogger extends AbstractLogger {
 
  public ConsoleLogger(int level){
   this.level = level;
  }
 
  @Override
  protected void write(String message) {  
   System.out.println("Standard Console::Logger: " + message);
  }
}

public class ErrorLogger extends AbstractLogger {
 
  public ErrorLogger(int level){
   this.level = level;
  }
 
  @Override
  protected void write(String message) {  
   System.out.println("Error Console::Logger: " + message);
  }
}

public class FileLogger extends AbstractLogger {
 
  public FileLogger(int level){
   this.level = level;
  }
 
  @Override
  protected void write(String message) {  
   System.out.println("File::Logger: " + message);
  }
}
단계 3
다른 종류의 기록 기 를 만 듭 니 다.서로 다른 오류 단 계 를 부여 하고 기록 기 마다 다음 기록 기 를 설정 합 니 다.모든 기록 기의 다음 기록 기 는 체인 의 일부분 을 대표 한다.

public class ChainPatternDemo {
  
  private static AbstractLogger getChainOfLoggers(){
 
   AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
   AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
   AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);
 
   errorLogger.setNextLogger(fileLogger);
   fileLogger.setNextLogger(consoleLogger);
 
   return errorLogger; 
  }
 
  public static void main(String[] args) {
   AbstractLogger loggerChain = getChainOfLoggers();
 
   loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");
 
   loggerChain.logMessage(AbstractLogger.DEBUG, 
     "This is a debug level information.");
 
   loggerChain.logMessage(AbstractLogger.ERROR, 
     "This is an error information.");
  }
}
단계 4
실행 프로그램,출력 결과:
Standard Console::Logger: This is an information.
File::Logger: This is a debug level information.
Standard Console::Logger: This is a debug level information.
Error Console::Logger: This is an error information.
File::Logger: This is an error information.
Standard Console::Logger: This is an error information.
이상 은 JAVA 책임 체인 모델 에 대한 상세 한 내용 입 니 다.JAVA 책임 체인 모델 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기