전면 컨트롤러 모드


Front Controller 패턴은 중앙 집중식 요청 처리 메커니즘을 제공하는 데 사용되며 모든 요청은 단일 처리기에 의해 처리됩니다. 핸들러는 인증/권한 부여/로깅을 수행하거나 요청을 추적한 다음 해당 요청을 적절한 핸들러에 전달할 수 있습니다. 다음은 이 디자인 패턴의 엔터티입니다.

  • Front Controller - 웹 기반 애플리케이션이든 데스크탑 기반 애플리케이션이든 관계없이 애플리케이션에 대한 모든 유형의 요청을 처리하는 단일 핸들러입니다.

  • Dispatcher - 프런트 엔드 컨트롤러는 디스패처 개체를 사용하여 해당 특정 핸들러에 요청을 디스패치할 수 있습니다.

  • View - 뷰는 요청을 위해 생성된 개체입니다.

Implementation

프런트 엔드 컨트롤러와 디스패처로 각각 FrontControllerDispatcher를 생성하겠습니다. HomeViewStudentView는 전면 컨트롤러에서 받은 요청에 대해 생성된 다양한 뷰를 나타냅니다.

FrontControllerPatternDemo, 데모 클래스에서는 FrontController를 사용하여 전면 컨트롤러 디자인 패턴을 보여줍니다.

frontcontroller_pattern_uml_diagram.jpg

1단계

뷰를 만듭니다.

HomeView.java

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

StudentView.java

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

2단계

디스패처 Dispatcher를 생성합니다.

Dispatcher.java

public class Dispatcher {
   private StudentView studentView;
   private HomeView homeView;
   public Dispatcher(){
      studentView = new StudentView();
      homeView = new HomeView();
   }

   public void dispatch(String request){
      if(request.equalsIgnoreCase("STUDENT")){
         studentView.show();
      }else{
         homeView.show();
      }	
   }
}

3단계

프런트 엔드 컨트롤러 FrontController를 만듭니다.

Context.java

public class FrontController {
	
   private Dispatcher dispatcher;

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

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

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

   public void dispatchRequest(String request){
      //记录每一个请求
      trackRequest(request);
      //对用户进行身份验证
      if(isAuthenticUser()){
         dispatcher.dispatch(request);
      }	
   }
}

4단계

FrontController를 사용하여 전면 컨트롤러 디자인 패턴을 시연합니다.

FrontControllerPatternDemo.java

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

5단계

출력을 확인합니다.

rreee