什么是前端控制器模式(FronController)?

124 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    提供请求统一处理接口,以便控制器验证与请求追踪
  2. 类图
    在这里插入图片描述
  3. 实例
interface View {
        /**
         * 显示
         */
        void show ();
    }

    static class StudentView implements View {
        @Override
        public void show() {
            System.out.println("student view");
        }
    }

    static class HomeView implements View {
        @Override
        public void show() {
            System.out.println("home view");
        }
    }

    static class Dispatcher {
        private View studentView = new StudentView();
        private View homeView = new HomeView();

        public void dispatch (String type) {
            if ("STU".equals(type)) {
                studentView.show();
            } else {
                homeView.show();
            }
        }
    }

    static class FrontController {
        private Dispatcher dispatcher;

        public FrontController () {
            dispatcher = new Dispatcher();
        }

        public void disPatchRequest (Request request) {
            traceRequest(request);
            if (hasAuth(request)) {
                dispatcher.dispatch(request.getType());
            }
        }

        private Boolean hasAuth (Request request) {
            if ("name".equals(request.getName())) {
                System.out.println("auth success");
                return true;
            }
            System.out.println("auth fail");
            return false;
        }

        private void traceRequest (Request request) {
            System.out.println("trace request : " + request.getName() + " " + request.getType());
        }
    }

    static class Request {
        private String type;
        private String name;

        public Request (String name, String type) {
            this.name = name;
            this.type = type;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
  1. 测试
public static void main(String[] args) {
        FrontController frontController = new FrontController();
        frontController.disPatchRequest(new Request("name", "STU"));
        System.out.println();
        frontController.disPatchRequest(new Request("name", "HOME"));
        System.out.println();
        frontController.disPatchRequest(new Request("noname", "HOME"));
    }

运行结果:

trace request : name STU
auth success
student view

trace request : name HOME
auth success
home view

trace request : noname HOME
auth fail

想看更多吗?请访问:设计模式