책임 사슬 패턴

둘 이상의 개체에 요청을 처리할 기회를 주어 요청 발신자와 수신자를 연결하지 않도록 합니다. 수신 개체를 연결하고 개체가 처리할 때까지 연결을 따라 요청을 전달합니다.



참가자들


  • 핸들러: 요청을 처리하기 위한 인터페이스를 정의합니다.
    (선택 사항) 후속 링크 구현
  • ConcreteHandler: 담당하는 요청을 처리합니다. 후속 작업에 액세스할 수 있습니다. ConcreteHandler가 요청을 처리할 수 있으면 그렇게 합니다. 그렇지 않으면 후계자에게 요청을 전달합니다.
  • 클라이언트: 체인의 ConcreteHandler 개체에 대한 요청을 시작합니다.

  • 암호




    public class Main {
    
        public static void main(String[] args) {
            Handler h1 = new ConcreteHandler1();
            Handler h2 = new ConcreteHandler2();
            Handler h3 = new ConcreteHandler3();
            h1.setSuccessor(h2);
            h2.setSuccessor(h3);
            int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };
    
            for (int request : requests) {
                h1.handleRequest(request);
            }
    
        }
    }
    
    public abstract class Handler {
    
        protected Handler successor;
    
        public void setSuccessor(Handler successor) {
            this.successor = successor;
        }
    
        abstract void handleRequest(int request);
    }
    
    public class ConcreteHandler1 extends Handler {
    
        @Override
        public void handleRequest(int request) {
            if (request >= 0 && request < 10) {
                System.out.println(this.getClass().getSimpleName() + " handled request " + request);
            } else if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
    
    public class ConcreteHandler2 extends Handler {
    
        @Override
        public void handleRequest(int request) {
            if (request >= 10 && request < 20) {
                System.out.println(this.getClass().getSimpleName() + " handled request " + request);
            } else if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
    
    public class ConcreteHandler3 extends Handler {
    
        @Override
        public void handleRequest(int request) {
            if (request >= 20 && request < 30) {
                System.out.println(this.getClass().getSimpleName() + " handled request " + request);
            } else if (successor != null) {
                successor.handleRequest(request);
            }
        }
    }
    

    산출



    ConcreteHandler1 handled request 2
    ConcreteHandler1 handled request 5
    ConcreteHandler2 handled request 14
    ConcreteHandler3 handled request 22
    ConcreteHandler2 handled request 18
    ConcreteHandler1 handled request 3
    ConcreteHandler3 handled request 27
    ConcreteHandler3 handled request 20
    




    eidherjulian61 / 디자인 패턴








    좋은 웹페이지 즐겨찾기