1. 程式人生 > >設計模式之前端控制器模式(Front Controller Pattern)

設計模式之前端控制器模式(Front Controller Pattern)

前端控制器模式(Front Controller Pattern)是用來提供一個集中的請求處理機制,所有的請求都將由一個單一的處理程式處理。該處理程式可以做認證/授權/記錄日誌,或者跟蹤請求,然後把請求傳給相應的處理程式。以下是這種設計模式的實體。
前端控制器(Front Controller) - 處理應用程式所有型別請求的單個處理程式,應用程式可以是基於 web 的應用程式,也可以是基於桌面的應用程式。
排程器(Dispatcher) - 前端控制器可能使用一個排程器物件來排程請求到相應的具體處理程式。
檢視(View) - 檢視是為請求而建立的物件。
程式碼:
1.檢視 home student

//前端控制器接收到的請求而建立的檢視
public class HomeView {
    public void show() {
        System.out.println("Displaying Home Page.");
    }
}
//前端控制器接收到的請求而建立的檢視
public class StudentView {
    public void show() {
        System.out.println("Displaying student page.");
    }
}

2.排程器

public class Dispatcher {
    private HomeView homeView;
    private StudentView studentView;
    public Dispatcher() {
        this.homeView=new HomeView();
        this.studentView=new StudentView();
    }
    public void dispatch(String request) {
        if("student".equalsIgnoreCase(request))
            studentView.show();
        else
            homeView.show();
    }
}

3.前端控制器

//前端控制器
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(String request) {
        System.out.println("Page requested "+request);
    }
    
    public  void dispatchRequest(String request) {
        trackRequest(request);
        if(isAuthenticUser()) {
            dispatcher.dispatch(request);
        }
    }
    
}

4.測試

public class Test {
    public static void main(String[] args) {
        FrontController controller=new FrontController();
        controller.dispatchRequest("home");
        controller.dispatchRequest("student");
    }
}

5.測試結果

Page requested home
User is authenticated successfully.
Displaying Home Page.
Page requested student
User is authenticated successfully.
Displaying student page.

6.結論
一個請求到前端控制器,然後呼叫排程器進行排程。

轉載於:
http://www.runoob.com/design-pattern/front-controller-pattern.html