1700484860
1700484861
我们再回过头来仔细看看类图,是不是有点熟悉?对,类似于中介者模式,我们并没有把中介者传递到各个同事类,只是我们采用中介者模式的思想,把中介者的职责分发出去由各个同事类来处理。
1700484862
1700484863
1700484864
1700484865
1700484866
设计模式之禅 38.1.2 模型管理器
1700484867
1700484868
模型管理器是整个MVC框架的难点,在这里我们会看到非常多的设计模式。我们在核心控制器的类图中看到有一个IActionDispatcher接口,它实现的模型行为分发是一个门面模式,如代码清单38-11所示。
1700484869
1700484870
代码清单38-11 模型行为分发接口
1700484871
1700484872
public interface IActionDispather{
1700484873
1700484874
//根据Action的名字,返回处理结果
1700484875
1700484876
public String actionInvoke(String actionName);
1700484877
1700484878
}
1700484879
1700484880
它的职责非常简单,得到actionName就执行,熟悉Struts的读者可能很清楚这个方法是非常复杂的,它要从配置文件中找到执行对象,然后执行方法,还要考虑值栈、异常等等,非常复杂。我们这里就有一个方法,它对外提供一个门面,所有的访问都是通过该门面来完成,其实现类如代码清单38-12所示。
1700484881
1700484882
代码清单38-12 模型分发实现
1700484883
1700484884
public class ActionDispather implements IActionDispather{
1700484885
1700484886
//需要执行的Action
1700484887
1700484888
private ActionManager actionManager=new ActionManager();
1700484889
1700484890
//拦截器链
1700484891
1700484892
private ArrayList<Interceptors>listInterceptors=InterceptorFactory.createInterceptors();
1700484893
1700484894
public String actionInvoke(String actionName){
1700484895
1700484896
//前置拦截器
1700484897
1700484898
return actionManager.execAction(actionName);
1700484899
1700484900
//后置拦截器
1700484901
1700484902
}
1700484903
1700484904
}
1700484905
1700484906
它是一个非常简单的类,对外部提供统一封装好的行为。模型管理器的类图如图38-6所示。
1700484907
1700484908
1700484909
[
上一页 ]
[ :1.70048486e+09 ]
[
下一页 ]