在软件开发中,经常会遇到需要对不同对象执行相似操作的情况。这些操作可能有一些共同的步骤,但也会因为对象的不同而有所差异。为了解决这个问题,可以采用模板方法模式。模板方法模式是一种行为型设计模式,它在父类中定义一个算法的框架,允许子类在不改变算法结构的情况下重写算法的某些特定步骤。
模板方法模式的核心思想是将算法的步骤分解为一系列操作,其中一些操作是通用的,而另一些操作则可以根据需要进行定制。这种模式使得可以在不修改现有代码的基础上,通过继承和重写来扩展功能。
下面是一个简单的模板方法模式的实现示例。假设需要实现一个消息搜索器,它可以根据发送日期、发送人和重要性等级来搜索消息。首先定义一个基类,其中包含一些基本操作和模板方法。
public class MessageSearcher {
protected Date dateSent;
protected String personName;
protected int importanceLevel;
public MessageSearcher(Date dateSent, String personName, int importanceLevel) {
this.dateSent = dateSent;
this.personName = personName;
this.importanceLevel = importanceLevel;
}
protected void createDateCriteria() {
System.out.println("标准日期条件已应用。");
}
protected void createSentPersonCriteria() {
System.out.println("标准发送人条件已应用。");
}
protected void createImportanceCriteria() {
System.out.println("标准重要性条件已应用。");
}
public String search() {
createDateCriteria();
createSentPersonCriteria();
System.out.println("模板方法根据搜索算法进行一些验证。");
createImportanceCriteria();
System.out.println("模板方法验证消息是否重要或无用。");
System.out.println();
return "一些消息列表...";
}
}
在这个基类中,定义了三个基本操作:创建日期条件、创建发送人条件和创建重要性条件。这些操作都是标准的,但可以根据需要在子类中被重写。
接下来,可以创建两个子类,分别用于搜索重要消息和无用消息。在这些子类中,可以重写创建重要性条件的操作。
public class ImportantMessageSearcher extends MessageSearcher {
public ImportantMessageSearcher(Date dateSent, String personName) {
super(dateSent, personName, 3); // 3 表示重要消息
}
@Override
protected void createImportanceCriteria() {
System.out.println("特殊重要性条件已形成:重要");
}
}
public class UselessMessageSearcher extends MessageSearcher {
public UselessMessageSearcher(Date dateSent, String personName) {
super(dateSent, personName, 1); // 1 表示无用消息
}
@Override
protected void createImportanceCriteria() {
System.out.println("特殊重要性条件已形成:无用");
}
}
在这两个子类中,重写了创建重要性条件的操作,以满足不同的消息搜索需求。
使用模板方法模式可以让轻松地实现消息搜索功能。只需要创建相应的子类实例并调用搜索方法即可。
MessageSearcher searcher = new UselessMessageSearcher(null, "Sally");
searcher.search();
searcher = new ImportantMessageSearcher(null, "Killer");
searcher.search();
输出结果如下:
标准日期条件已应用。
标准发送人条件已应用。
模板方法根据搜索算法进行一些验证。
特殊重要性条件已形成:无用
模板方法验证消息是否重要或无用。
标准日期条件已应用。
标准发送人条件已应用。
模板方法根据搜索算法进行一些验证。
特殊重要性条件已形成:重要
模板方法验证消息是否重要或无用。
通过这个示例,可以看到模板方法模式的强大之处。它允许在不改变算法结构的情况下,通过继承和重写来扩展功能,使得代码更加灵活和可维护。