美文网首页
Java设计模式(3):前端控制器模式

Java设计模式(3):前端控制器模式

作者: 博为峰51Code教研组 | 来源:发表于2017-05-03 19:39 被阅读0次

    前端控制器模式(Front Controller Pattern)提供一种可以集中管理请求的控制器,即所谓的前端控制器,该前端控制器用于响应客户请求,为每个请求寻找匹配的处理器。在这种模式中,控制器提供一个处理不同请求的控制点,这些控制点包括日志记录,安全事务,错误处理和响应内容的生成(如视图),通过将这些工作集中在一点进行处理,大大地减低了Java代码量,同时这种机制也可以减少视图模块的程序逻辑,保证了在不同请求之间可以重用大量的逻辑代码。

    前端控制器模式主要有三类组件构成:

    前端控制器(Front Controller)

    处理应用程序所有类型请求的单个处理程序,应用程序可以是基于web 的应用程序,也可以是基于桌面的应用程序。

    处理器(Handler)

    前端控制器可能使用一个处理器对象来处理请求到相应的具体处理程序。

    视图(View)

    视图是为请求而创建的对象。

    下面的示例我们将创建FrontController,Handler 分别当作前端控制器和处理器。HomeView 和 LoginView 表示各种为前端控制器接收到的请求而创建的视图。FrontControllerPatternDemo是演示类使用 FrontController 来演示前端控制器设计模式。

    示例:

    public abstract class View {

    public abstract void show();

    }

    public class HomeView extends View {

    @Override

    public void show() {

    System.out.println("显示主页视图");

    }

    }

    public class LogInView extends View {

    @Override

    public void show() {

    System.out.println("显示登陆视图");

    }

    }

    public class Dispatcher {

    private HomeView homeView;

    private LogInView logInView;

    public Dispatcher(){

    homeView=new HomeView();

    logInView=new LogInView();

    }

    public void doDispacher(String request) {

    if("HOME".equals(request)){

    homeView.show();

    }else{

    logInView.show();

    }

    }

    }

    public class FrontController {

    private Dispatcher dispatcher;

    public FrontController(){

    dispatcher=new Dispatcher();

    }

    public boolean authenticate() {

    System.out.println("通过认证");

    return true;

    }

    public void dispatcher(String request){

    if( authenticate()){

    dispatcher.doDispacher(request);

    }

    }

    }

    public class FrontControllerPatternDemo {

    public static void main(String[] args) {

    FrontController controller=new FrontController();

    controller.dispatcher("HOME");

    }

    }

    相关文章

      网友评论

          本文标题:Java设计模式(3):前端控制器模式

          本文链接:https://www.haomeiwen.com/subject/gbjltxtx.html