设计模式-前端控制器模式
Posted 技术趋势
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-前端控制器模式相关的知识,希望对你有一定的参考价值。
上文(设计模式-数据访问对象模式):
背景
前端控制器模式是什么?
前端控制器模式可以干嘛?
个人理解:
前端控制器模式类图
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
实现代码
/**
* @Auther: csh
* @Date: 2020/6/29 10:09
* @Description:抽象的视图
*/
public abstract class Grade {
public abstract void show();
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:11
* @Description:成绩良 view
*/
public class Good extends Grade {
private static Good good = new Good();
private Good(){
}
public static Good getInstance(){
return good;
}
public void show() {
System.out.println("成绩良好");
}
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:10
* @Description:view
*/
public class Excellent extends Grade {
public static Excellent excellent = new Excellent();
private Excellent(){
}
public static Excellent getInstance(){
return excellent;
}
public void show() {
System.out.println("成绩优秀。");
}
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:12
* @Description:成绩不及格(view)
*/
public class Bad extends Grade {
private static Bad bad = new Bad();
private void Bad(){
}
public static Bad getInstance(){
return bad;
}
public void show() {
System.out.println("成绩不及格");
}
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:11
* @Description:
*/
public class General extends Grade {
private static General general = new General();
public void show() {
System.out.println("成绩一般");
}
private General(){
}
public static General getInstance(){
return general;
}
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:12
* @Description:调度器
*/
public class Dispatcher {
public void dispatch(int grade){
if(grade<60){
Bad.getInstance().show();
}else if(grade>=60 && grade<70){
General.getInstance().show();
}else if(grade>=70 && grade<80){
Good.getInstance().show();
}else{
Excellent.getInstance().show();
}
}
}
/**
* @Auther: csh
* @Date: 2020/6/29 10:40
* @Description:控制器
*/
public class GradeController {
private Dispatcher dispatcher;
public GradeController(Dispatcher dispatcher) {
this.dispatcher = dispatcher;
}
private void log(int grade){
System.out.println("请求的成绩是:"+grade);
}
private Boolean isAuthenticUser(){
System.out.println("默认通过");
return true;
}
public void dispatcherRequest(int grade){
//打印日志
log(grade);
//对用户进行鉴权
if(isAuthenticUser()){
dispatcher.dispatch(grade);
}
}
}
结果
请求的成绩是:1
默认通过
成绩不及格
请求的成绩是:10
默认通过
成绩不及格
请求的成绩是:100
默认通过
成绩优秀。
请求的成绩是:80
默认通过
成绩优秀。
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
最后
前端控制器模式,通过用户请求控制器,然后调度器进行统一的拦截和记录及请求。当然调度器角色有点类似于门面模式中的统一面对控制器的请求思想,一但这个调度器发生异常,那整个系统的请求都可能瘫痪,有点类似有家附近的变压器,一但出问题,整个村或者发几条街都没电了。不过这个一般都在mvc里中常用,模式也很成熟了。
以上是关于设计模式-前端控制器模式的主要内容,如果未能解决你的问题,请参考以下文章