設計模式 - 前端控制器模式



前端控制器設計模式用於提供集中式的請求處理機制,以便所有請求都由單個處理程式處理。此處理程式可以執行身份驗證/授權/日誌記錄或請求跟蹤,然後將請求傳遞給相應的處理程式。以下是這種型別的設計模式的實體。

  • 前端控制器 - 應用程式(基於 Web 或基於桌面)的所有型別請求的單個處理程式。

  • 排程器 - 前端控制器可以使用排程器物件,該物件可以將請求分派到相應的特定處理程式。

  • 檢視 - 檢視是發出請求的物件。

實現

我們將建立一個FrontControllerDispatcher,分別充當前端控制器和排程器。HomeViewStudentView代表各種檢視,請求可以到達前端控制器。

FrontControllerPatternDemo,我們的演示類,將使用FrontController來演示前端控制器設計模式。

Front Controller Pattern UML Diagram

步驟 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.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.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){
      //log each request
      trackRequest(request);
      
      //authenticate the user
      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

驗證輸出。

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page
廣告