設計模式---前端控制器模式
- 介紹
前端控制器模式(Front Controller Pattern)是用來提供一個集中的請求處理機制,所有的請求都将由一個單一的處理程式處理。該處理程式可以做認證/授權/記錄日志,或者跟蹤請求,然後把請求傳給相應的處理程式。以下是這種設計模式的實體。
- 前端控制器(Front Controller) - 處理應用程式所有類型請求的單個處理程式,應用程式可以是基于 web 的應用程式,也可以是基于桌面的應用程式。
- 排程器(Dispatcher) - 前端控制器可能使用一個排程器對象來排程請求到相應的具體處理程式。
- 視圖(View) - 視圖是為請求而建立的對象。
- 實作
/**
* 排程器
*
* @author OF
* @date 2018年10月18日
*/
public class DispatcherServlet {
private HashMap<String, Servlet> mapping = new HashMap<String, Servlet>();
public DispatcherServlet(){
mapping.put("user",new UserServlet());
mapping.put("index",new IndexServlet());
}
public void dispatch(String url) {
// 根據URL擷取控制執行個體
Servlet servlet = mapping.get(url);
servlet.service();
}
}
/**
* 前端控制器(入口)
*
* @author OF
* @date 2018年10月18日
*/
public class FrontController {
private DispatcherServlet dispatcherServlet;
public FrontController() {
dispatcherServlet = new DispatcherServlet();
}
private void init() {
System.out.println("init");
}
private void check() {
System.out.println("check param");
}
public void doService(String url) {
init();
check();
dispatcherServlet.dispatch(url);
}
}
public class TestMain {
public static void main(String[] args) {
FrontController frontController = new FrontController();
frontController.doService("index");
}
}
public interface Servlet {
void init();
void service();
void destroy();
}
public abstract class HttpServlet implements Servlet {
@Override
public void init() {
}
@Override
public void service() {
}
@Override
public void destroy() {
}
}
public class UserServlet extends HttpServlet {
@Override
public void service() {
System.out.println("user servlet 完成");
}
}
public class IndexServlet extends HttpServlet {
@Override
public void service() {
System.out.println("index servlet 完成");
}
}
- 總結(使用場景)
- Servlet
- Spring mvc
- 接口入口