자바 디자인 모델 (2) - 책임 체인 디자인 모델

13802 단어 디자인 모드
글 목록
  • 1. 책임 체인 디자인 모델 이 무엇 입 니까
  • 2. 책임 체인 의 응용 장면
  • 4. 책임 체인 모델 의 코드 데모
  • 1. 책임 체인 디자인 모델 이란 무엇 인가
    이 대상 을 하나의 체인 으로 만 들 고 이 체인 을 따라 요청 을 전달 합 니 다. 체인 의 한 대상 이 이 요 구 를 처리 하기 로 결정 할 때 까지.
    요점 은:,
    1. 여러 대상 이 공동으로 하나의 임 무 를 처리한다.2. 이러한 대상 은 체인 식 저장 구 조 를 사용 하여 하나의 체인 을 형성 하고 각 대상 은 자신의 다음 대상 3, 한 대상 이 임 무 를 처리 하 는 것 을 알 고 일부 조작 을 추가 한 후에 대상 을 다음 임 무 를 전달 할 수 있다.이 대상 에서 임무 처 리 를 끝내 고 임 무 를 끝 낼 수도 있다.4. 클 라 이언 트 는 체인 구 조 를 조립 하 는 것 을 책임 지지 만 클 라 이언 트 는 최종 적 으로 누가 임 무 를 처 리 했 는 지 에 관심 을 가 질 필요 가 없다.
    여러분 은 회사 의 제출 휴가 절차 로 이해 할 수 있 습 니 다. 먼저 제 가 먼저 양식 을 작성 한 다음 에 팀장 님 께 서 심사 비준 을 하신 다음 에 인 사 를 알려 드 리 고 마지막 으로 웹 팀 에 자신 이 휴가 를 낸 일 을 메 일 로 알려 드 리 겠 습 니 다.전체 과정 은 절차 가 있 기 때문에 순서 가 바 뀌 어 서 는 안 된다. 이것 이 바로 책임 체인 이다.
    2. 책임 체인 의 응용 장면
    1. 다 중 조건 부 프로 세 스 판단 권한 제어 2. ERP 시스템 프로 세 스 승인 사장, 인사 매니저, 프로젝트 매니저 3. 자바 필터 의 바 텀 구현 Filter
    예 를 들 어 자바 필터 에서 클 라 이언 트 가 서버 에 요청 을 보 내 면 필 터 는 매개 변수 필터, session 필터, 폼 필터, 숨 기기 필터, 검 측 요청 헤더 필 터 를 거 칩 니 다.
    4. 책임 체인 모드 의 코드 데모
    다음 장면 이 있 습 니 다.프로그래머 의 수요 와 제품 매니저 의 말다툼
    
    public abstract class Handler {
        private Handler nextHandler;
        private int level;
        public Handler(int level) {
            this.level = level;
        }
    
        //       ,  final,      
        public final void handleMessage(Demand demand) {
            if (level == demand.demandLevel()) {
                this.report(demand);
            } else {
                if (this.nextHandler != null) {
                    System.out.println("     ,      ");
                    this.nextHandler.handleMessage(demand);
                } else {
                    System.out.println("   boss,    ");
                }
            }
        }
    
        public void setNextHandler(Handler handler) {
            this.nextHandler = handler;
        }
    
        //     ,    
        public abstract void report(Demand demand);
    }
    

    하위 클래스 구현
    //     
    public class TechnicalManager extends Handler { //      ,     1
        public TechnicalManager() {
            super(1);
        }
    
        @Override
        public void report(Demand demand) {
            System.out.println("  :" + demand.detail());
            System.out.println(getClass().getSimpleName() + ":     ,      ");
        }
    }
    
    // boss
    public class Boss extends Handler {  // boos      2
        public Boss() {
            super(2);
        }
    
        @Override
        public void report(Demand demand) {
            System.out.println("  :" + demand.detail());
            System.out.println(getClass().getSimpleName() + ":      ,      ");
        }
    }
    
    

    마지막 집행
    public class FactoryHandler {
    
    public class Client {
        public static void main(String[] args) {
            Demand demandA = new DemandA(); //        A  (   )
            Demand demandB = new DemandB(); //       (   )
    
            Boss boss = new Boss();  //         
            TechnicalManager technicalManager = new TechnicalManager();  //       
            technicalManager.setNextHandler(boss); //       //        boos
    
            technicalManager.handleMessage(demandA);  //       
            System.out.println("============================");
            technicalManager.handleMessage(demandB);  //      
        }
    }
    

    좋은 웹페이지 즐겨찾기