模板方法模式的代码实践示例
模板方法模式的概念:
在操作中定义算法的框架,将一些步骤延迟到子类中。
模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。
什么时候可以用模板方法模式?
有很固定的流程和步骤,就可以使用模板方法模式。
所有子类都会按照相同的模板执行算法。子类不能改变算法结构,但是可以重新定义算法的某些步骤。
如果每个子类具有不同流程和步骤,那模板方法不适用。
示例:
- Template:
public interface Template {
default void doSomething() {
// 固定不变的步骤,每个子类都一样。公共逻辑。
commonStep();
//有变化的步骤,每个子类不一样
step1();
//有变化的步骤,每个子类不一样
step2();
}
/**
* 固定不变的步骤,每个子类都一样。公共逻辑。
*/
default void commonStep() {
System.out.println("doSomething commonStep");
}
/**
* 有变化的步骤,每个子类不一样
*/
void step1();
/**
* 有变化的步骤,每个子类不一样
*/
void step2();
}
- Template1:
public class Template1 implements Template {
@Override
public void step1() {
System.out.println("Template1 step1");
}
@Override
public void step2() {
System.out.println("Template1 step2");
}
}
- Template2 :
class Template2 implements Template {
@Override
public void step1() {
System.out.println("Template2 step1");
}
@Override
public void step2() {
System.out.println("Template2 step2");
}
}
- Client:
public class Client {
public static void main(String[] args) {
Template template1 = new Template1();
System.out.println("template1 doSomething");
template1.doSomething();
System.out.println("-------------");
Template template2 = new Template2();
System.out.println("template2 doSomething");
template2.doSomething();
}
}
执行结果:
template1 doSomething
doSomething commonStep
Template1 step1
Template1 step2
-------------
template2 doSomething
doSomething commonStep
Template2 step1
Template2 step2
可以看到,子类1(示例中的template1) 和 子类2 (示例中的template2) 都有固定的步骤 commonStep,
算法结构是: 固定的步骤 commonStep --> 可变的步骤 step1 --> 可变的步骤 step2 (当然也可以是其他的顺序,根据实际情况处理) ,
在不改变算法结构的情况下,子类1 和 子类2 重新定义算法的某些步骤 step1、step2 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-01-04 ElastaticSearch -- es深度分页 searchAfter
2018-01-04 SpringBoot简单理解