GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算 法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。
可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。使用模板方法使系统扩展性增强,最小化了变化对系统的影响。这一点,在下面的举例中可以很明显的看出来。
来看下这个简单模式的结构吧:
1) AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2) ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
最近项目中网页超时判断、权限控制等功能,使用模板方法模式在控制层实现,颇有借鉴意义。
public abstract class BaseAction extends Action {
private static Logger logger = Logger.getLogger(BaseAction.class);
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
logger.info("now enter BaseAction:execute method!");
HttpSession session = request.getSession(false);
ActionErrors errors = new ActionErrors();
logger.info("session:" + session);
// 网页超时
if (session == null) {
logger.error("session has been timeout!");
request.setAttribute("message", "网页超时,请重新登录!");
return mapping.findForward("session_time_out");
} else {
if ((OperatorInfoView) session.getAttribute("operator") == null) {
logger.info(" OperatorInfoView is null");
request.setAttribute("message", "网页超时,请重新登录!");
return mapping.findForward("session_time_out");
}
}
// 权限
Boolean flag = Boolean.FALSE;
String authorityKey = this.getAuthorityId();
flag = this.getPrivilege(session, authorityKey);
if (!flag.booleanValue()) {
request.setAttribute("message", "对不起,您没有权限!");
return mapping.findForward("error");
}
logger.info("BaseAction execute method operated successfully!");
return execute(mapping, form, request, response, errors, session);
}
public abstract ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response, ActionErrors errors,
HttpSession session);
/**
* 获得权限
*/
public abstract String getAuthorityId();
protected Boolean getPrivilege(HttpSession session, String authorityKey) {
Boolean flag = Boolean.FALSE;
List authorityList = (List) session.getAttribute("authorityList");
if (authorityList != null) {
...
flag = Boolean.TRUE;
}
return flag;
}
//打印错误信息
public void messageError(HttpServletRequest request, String msg) {
ActionMessages actionMessages = new ActionMessages();
actionMessages.add(Constant.ERROR, new ActionMessage(msg));
addMessages(request, actionMessages);
}
}
public class PreAddPersonAction extends BaseAction {
private static final Logger logger = Logger.getLogger(PreAddPersonAction.class);
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response,
ActionErrors errors, HttpSession session) {
messageError(request, "资源文件信息");
return mapping.findForward("success");
}
@Override
public String getAuthorityId() {
return 常量;
}
}
分享到:
相关推荐
在本篇博客笔记中,我们将探讨如何利用Java进行数据库连接,并将模板方法模式应用于数据库操作,以实现更高效和可维护的代码。 首先,要进行数据库连接,我们需要引入JDBC驱动。对于不同类型的数据库(如MySQL、...
此外,在实际应用中,策略模式结合模板方法模式的系统结构如下图所示: 图 5 策略模式结合模板方法模式的结构示意图 在这个结构中,策略模式是主要的结构,模板方法模式是局部实现的方式。这样可以使得策略模式...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...
在给定的PPT内容中,首先通过一个简单的生活实例——泡咖啡与泡茶的过程——来引入模板方法模式的应用场景。无论是泡咖啡还是泡茶,都有几个共同的步骤: 1. **烧开水**:这是泡咖啡和泡茶都必需的。 2. **泡制过程*...
#### 四、模板方法模式的应用场景 1. **多步骤处理**:当一个业务流程包含多个固定步骤时,可以使用模板方法模式来定义这些步骤的顺序。 2. **算法的框架**:当需要定义一个算法的骨架,而将算法的某些步骤留给...
在`src`目录下的源代码可能包含了类似这样的示例,展示了如何在实际编程中应用模板方法模式。通过分析这些代码,你可以更深入地理解如何在不同场景下使用模板方法模式来解决设计问题,提高代码的复用性和可扩展性。
通过学习和应用模板方法模式,开发者可以在保证代码结构清晰的同时,提高代码的复用性和可维护性。在实际开发中,模板方法模式常用于框架设计、游戏逻辑、GUI组件等场景,有助于降低复杂度,提高代码的可读性和可...
模板方法模式是面向对象设计中的一种行为设计模式,它在软件工程中扮演着重要的角色,尤其是在...在本压缩包“templates”中,可能包含了模板方法模式的示例代码,你可以通过查看这些代码来进一步理解和应用这个模式。
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,...理解并合理应用模板方法模式,能显著提高代码的可读性和可维护性。
在实际应用中,模板方法模式常用于框架设计,例如UI框架的事件处理、数据访问对象(DAO)的增删改查操作等。通过提供一个基础的执行流程,并允许子类在特定步骤中自定义行为,模板方法模式使代码更加结构化和易于...
在给定的"模板方法模式例子"中,我们可以预计包含一个或多个Java文件,这些文件展示了如何应用模板方法模式。通常,这将包括一个抽象类(AbstractClass)和至少一个或多个具体类(ConcreteClass),它们继承自抽象类...
模板方法模式...在实际应用中,C++开发者应根据具体场景选择合适的设计模式,模板方法模式适用于那些算法流程固定,但部分细节可变的情况。通过理解并熟练运用模板方法模式,可以提高代码的组织性和可维护性。
模板方法模式的应用场景包括: 1. 当有多个类实现相同算法的不同版本时,可以考虑使用模板方法模式,将公共部分抽取到抽象类中。 2. 当想在已有的算法结构中插入新的步骤,但又不想修改已有代码时,模板方法模式提供...
模板方法模式" 中,应该包含了关于模板方法模式的更多详细讲解、示例代码以及如何在实际项目中应用该模式的实例。通过学习这部分内容,读者可以深入理解模板方法模式的工作原理,并学会如何在自己的代码中有效利用这...
模板方法模式是一种行为设计模式,它允许在...在实际应用中,模板方法模式常用于处理如数据处理、文件读写、游戏逻辑等场景,通过定义通用的处理流程,然后由不同的子类提供具体的实现细节,使得系统更加灵活和可扩展。
这种设计模式广泛应用于框架和库中,例如各种模板引擎,它们定义了渲染模板的基本流程,而用户可以定制特定的模板解析规则。在处理重复性任务时,模板方法模式能有效减少代码冗余,提高代码的可维护性和可扩展性。
在iOS应用开发中,模板方法模式的典型应用场景可能包括视图控制器的生命周期方法、数据加载流程、动画序列等。例如,一个抽象的ViewController基类可以定义一个模板方法来处理加载视图的过程,其中包含初始化视图、...
在软件设计模式的世界里,工厂模式和模板方法模式是两种常用的设计模式,它们都有各自的优点和应用场景。这两种模式都是面向对象设计原则的体现,能够帮助我们编写出更加灵活、可扩展的代码。让我们来深入探讨一下这...
模板方法模式是一种设计模式,属于行为设计模式,它在面向对象设计中被广泛使用,用于定义算法的骨架,而将一些步骤延迟到子类...在上述的试卷问题中,通过应用模板方法模式,我们可以更方便地管理和维护不同的试题集。