CS Study/디자인패턴

22-04-17-책임연쇄패턴-1부-패턴소개

KyeongMin 2022. 4. 18. 23:40
728x90
반응형

01.책임연쇄패턴

  • 책임들의 연쇄적으로 연결되어 있는 패턴
  • 각각의 책임들이 연결되어 있는것
    • 단일 책임 원칙의 책임이랑 같다
      • 어떤 클래스가 변경되어야하는 이유는 한가지 이유여만 하는것
  • 이 패턴은 요청을 보내는 쪽과 처리하는 쪽을 분리하는 패턴
    • 요청을 보내는 쪽에서 요청을 처리하는 핸들러가 어떤 구체적인 타입인지 상관없이 디커플링된 상태에서 요청을 처리하게 해주는 패턴임

02.소스로 알아보는 패턴

02.1 Client

public class Client{
    public static void main(String[] args){
        Request request = new Request("무궁화 꽃이 피었습니다.");
        RequestHandler requestHandler = new RequestHandler();
        requestHander.handler(request);
    }
}

02.2 RequestHandler

public class RequestHandler{
    public handler(Request request){
        System.out.println(request.getBody());
    }
}
  • 인증, 처리를 해야한다면?
    • 그냥 코드를 수정해서 인증되는지 아닌지 확인을 하는법
      • 이렇게 하면 단일 책임원칙에 위배함
    • AuthRequestHandler 생성
      • Client는
        • AuthRequestHandler 이를 통해 인증을 처리
      • public class Client{
            public static void main(String[] args){
                Request request = new Request("무궁화 꽃이 피었습니다.");
                RequestHandler requestHandler = new AuthRequestHandler();
                requestHander.handler(request);
            }
        }
      • 문제는 단일책일원칙은 지킬 수 있음
      • 단, 클라이언트가 선택을 해야함, 클라이언트가 바뀜
        • 책임이 추가되는 경우 로그와 관련된것이 추가가된다.
        • 계속 추가되면 복잡해지고 클라이언트가 그 사용해야하는 것을 알아야하는것이 문제임
    • public class AuthRequestHandler extends RequestHandler{
          public void handler(Request request){
            System.out.println("인증이 되었나?");
            System.out.println("이 핸들러를 사용할 수 있는 유저인가?");
            super.handler(request);
          }
      }

03.그래서? 책임 연쇄 패턴은 뭐니?

  • 요청을 보내는 쪽(sender)과 요청을 처리하는 쪽(receiver)의 분리하는 패턴
    • 핸들러 체인을 사용해서 요청을 처리

https://github.com/3DPIT/3dpit.github.io/blob/master/_posts/DesignPattern/22-04-18-%EC%B1%85%EC%9E%84%EC%97%B0%EC%87%84%ED%8C%A8%ED%84%B4-1%EB%B6%80-%ED%8C%A8%ED%84%B4%EC%86%8C%EA%B0%9C.md

 

728x90
반응형