设计模式---前端控制器模式
- 介绍
前端控制器模式(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
- 接口入口