前端控制器模式

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


前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
  • 前端控制器(Front Controller):处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。

  • 调度器(Dispatcher):前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。

  • 视图(View):视图是为请求而创建的对象。


实现

我将创建 FrontController、Dispatcher 分别当作前端控制器和调度器。HomeView 和 StudentView 表示各种为前端控制器接收到的请求而创建的视图。
Main,我们的演示类使用 FrontController 来演示前端控制器设计模式。

前端控制器模式的 UML 图

步骤 1:创建视图。

HomeView.java

    
    package com.dao.pattern.frontcontroller.vo;
    
    /**t
     * 视图:首页
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.vo.HomeView.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:40:00
     */
    public class HomeView{
    
        /**
         * 首页视图
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param
         * @return void
         */
        public void show(){
            System.out.println("进入主页");
        }
    }


UserView.java


    package com.dao.pattern.frontcontroller.vo;
    
    /**
     * 视图:用户中心
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.vo.UserView.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:41:00
     */
    public class UserView{
        /**
         * 用户中心视图
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param
         * @return void
         */
        public void show(){
            System.out.println("进入用户中心");
        }
    }


NonView.java

    
    package com.dao.pattern.frontcontroller.vo;
    
    /**
     * 无效的页面
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.vo.NonView.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:50:00
     */
    public class NonView {
        /**
         * 无效页面
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param
         * @return void
         */
        public void show(){
            System.out.println("无效页面");
        }
    }


步骤 2:创建调度器 Dispatcher。

Dispatcher.java

    
    package com.dao.pattern.frontcontroller.core;
    
    import com.dao.pattern.frontcontroller.vo.HomeView;
    import com.dao.pattern.frontcontroller.vo.NonView;
    import com.dao.pattern.frontcontroller.vo.UserView;
    
    /**
     * 调度器
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.core.Dispatcher.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:42:00
     */
    public class Dispatcher{
        /**
         * 首页
         */
        public static final String HOME="HOME";
        /**
         * 用户
         */
        public static final String USER="USER";
    
        /**
         * 通过请求的视图关键字来进行调度对应的视图
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param requst
         * @return void
         */
        public void dispatch(String requst){
            if(HOME.equalsIgnoreCase(requst)){
                new HomeView().show();
            }else if(USER.equalsIgnoreCase(requst)){
                new UserView().show();
            }else {
                new NonView().show();
            }
        }
    
    }


步骤 3:创建前端控制器 FrontController。

FrontController.java

    
    package com.dao.pattern.frontcontroller.core;
    
    /**
     * 前端控制器
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.core.FrontController.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:43:00
     */
    public class FrontController {
        /**
         * 声明调度器
         */
        private Dispatcher dispatcher;
    
        /**
         * 构造方法对成员变量进行初始化
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param
         * @return
         */
        public FrontController(){
            dispatcher = new Dispatcher();
        }
    
        /**
         * 模拟用户校验
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param
         * @return boolean
         */
        private boolean isAuthenticUser(){
            System.out.println("这里一般可以做一些权限校验。");
            return true;
        }
    
        /**
         * 记录请求记录
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param request
         * @return void
         */
        private void trackRequest(String request){
            System.out.println("用户请求记录:" + request);
        }
    
        /**
         * 调度器调度视图
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param request
         * @return void
         */
        public void dispatchRequest(String request){
            //记录每一个请求
            trackRequest(request);
            //对用户进行身份验证
            if(isAuthenticUser()){
                dispatcher.dispatch(request);
            }
        }
    }


步骤 4:使用 FrontController 来演示前端控制器设计模式。

Main.java

    
    package com.dao.pattern.frontcontroller.main;
    
    import com.dao.pattern.frontcontroller.core.Dispatcher;
    import com.dao.pattern.frontcontroller.core.FrontController;
    
    /**
     * 主程序入口
     *
     * @author 阿导
     * @version 1.0
     * @fileName com.dao.pattern.frontcontroller.main.Main.java
     * @CopyRright (c) 2018-万物皆导
     * @created 2018-04-07 12:59:00
     */
    public class Main {
    
        /**
         * 主方法入口
         *
         * @author 阿导
         * @time 2018/4/7
         * @CopyRight 万物皆导
         * @param args
         * @return void
         */
        public static void main(String[] args){
            //声明前端控制器
            FrontController controller=new FrontController();
            //进入首页
            controller.dispatchRequest(Dispatcher.HOME);
            System.out.println("=================================");
            //进入用户中心
            controller.dispatchRequest(Dispatcher.HOME);
            System.out.println("=================================");
            //进入其他页面
            controller.dispatchRequest("OTHER");
        }
    
    }


步骤 5:验证输出。

    
    用户请求记录:HOME
    这里一般可以做一些权限校验。
    进入主页
    =================================
    用户请求记录:HOME
    这里一般可以做一些权限校验。
    进入主页
    =================================
    用户请求记录:OTHER
    这里一般可以做一些权限校验。
    无效页面
    
    

需要云服务器的不要错过优惠

阿里云低价购买云服务,值得一看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值