世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
- 意图
提供请求统一处理接口,以便控制器验证与请求追踪 - 类图
- 实例
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;
}
}
- 测试
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