Java Design Pattern - Front Controller Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Front Controller Pattern

  • 모든 요청이 단일 핸들러로 처리되도록 중앙 집중식 요청 처리 메커니즘을 제공하는 데 사용된다.
  • 이 핸들러는 요청의 인증/권한/로깅 또는 추적을 수행한 다음 요청을 해당 핸들러로 전달할 수 있다.

Example

public class HomeView {

  public void show() {
    System.out.println("Displaying Home Page");
  }

}
public class StudentView {

  public void show() {
    System.out.println("Displaying Student Page");
  }

}
  • View의 역할을 할 HomeView와 StudentView를 구현한다.
public class Dispatcher {

  private StudentView studentView;
  private HomeView homeView;

  public Dispatcher() {
    this.studentView = new StudentView();
    this.homeView = new HomeView();
  }

  public void dispatch(Request request) {
    if (Request.STUDENT.equals(request)) {
      this.studentView.show();
    } else {
      homeView.show();
    }
  }

}
  • Dispatcher를 통해 Request에 대한 View를 제공하도록 처리한다.
public class FrontController {

  private Dispatcher dispatcher;

  public FrontController() {
    this.dispatcher = new Dispatcher();
  }

  private boolean isAuthenticUser() {
    System.out.println("User is authenticated successfully.");
    return true;
  }

  private void trackRequest(Request request) {
    System.out.println("Page requested: " + request.name());
  }

  public void dispatchRequest(Request request) {
    // Long each request.
    trackRequest(request);
    // Authenticate the user.
    if (isAuthenticUser()) {
      dispatcher.dispatch(request);
    }
  }

}
  • FrontController에서는 Request에 대한 권한 관리와 로깅을 수행한다.
public class FrontControllerPatternMain {

  public static void main(String[] args) {
    FrontController frontController = new FrontController();
    frontController.dispatchRequest(Request.HOME);
    frontController.dispatchRequest(Request.STUDENT);
  }

}
  • Request를 통해 각 요청을 수행해본다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기