96小时MCP实战之路:从协议原理到服务端搭建与智能体集成
2026/10/8 2:39:42
在很多系统中,你会看到大量这样的代码:
voidprocess(){step1();step2();step3();}但不同子类的step2()又不一样:
流程是固定的,但实现细节不同。
如果每个类都自己写一套流程,就会:
模板方法模式就是为了解决“流程固定,步骤变化”的问题。
流程不变,步骤可变,这就是模板方法。
在一个方法中定义算法的骨架,而将一些步骤延迟到子类中。
详细解释:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
一句话理解:
父类规定流程,子类实现细节。
模板方法模式强调的是:控制权反转(IoC)
父类决定调用顺序,子类只负责实现。
包含两个核心角色:
负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。
一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXxx,返回值类型为boolean类型。
实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的组成步骤。
publicabstractclassDataExporter{// 模板方法publicfinalvoidexport(){connect();readData();writeData();close();}protectedvoidconnect(){System.out.println("连接数据库");}protectedvoidclose(){System.out.println("关闭连接");}protectedabstractvoidreadData();protectedabstractvoidwriteData();}注意:为防止恶意操作,一般模板方法都加上 final 关键词。
publicclassExcelExporterextendsDataExporter{@OverrideprotectedvoidreadData(){System.out.println("读取 Excel 数据");}@OverrideprotectedvoidwriteData(){System.out.println("写入 Excel 文件");}}publicclassPdfExporterextendsDataExporter{@OverrideprotectedvoidreadData(){System.out.println("读取 PDF 数据");}@OverrideprotectedvoidwriteData(){System.out.println("写入 PDF 文件");}}DataExporterexporter=newExcelExporter();exporter.export();输出流程始终一致。
protectedbooleanneedLog(){returnfalse;}子类可选择性覆盖。
模板方法 = 固定流程 + 可插拔步骤
AbstractListadd()→add(int,E)父类控制流程,子类实现底层存储。
| 维度 | 模板方法模式 | 外观模式 |
|---|---|---|
| 模式类型 | 行为型模式 | 结构型模式 |
| 关注点 | 算法步骤的扩展 | 接口简化 |
| 继承关系 | 使用继承 | 使用组合 |
| 灵活性 | 子类可改变部分行为 | 隐藏子系统复杂性 |
| 使用层次 | 同一抽象层次 | 不同层次之间 |
模板模式 | 菜鸟教程
《图解设计模式》
模板方法 - Java教程 - 廖雪峰的官方网站
模板方法设计模式