模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行
场景:总部设计的宝马车的模型模板,由各个分厂去根据抽象方法实现不同的车型,比如车的启动有多种不同实现,车的喇叭系统有多种不同实现,车的导航和自动停车可以有多种不同实现
但最终一辆车的运作,是以启动——鸣笛注意——导航——停车的固定流程去走的,所以需要严格按照宝马规定的流程来走
抽象模板类:
/** * 场景:总部设计的宝马车的模型模板 * 由各个分厂去根据抽象方法实现不同的车型 * @author test11 */ public abstract class BMWTemplate { /** * 车的启动程序 */ public abstract void start(); /** * 车的喇叭系统 */ public abstract void alarm(); /** * 车的导航系统 */ public abstract void guide(); /** * 停车 */ public abstract void stop(); /** * 每辆上路跑的汽车,流程上是一样的,所以固化为模板 */ public void run(){ this.start(); this.alarm(); this.guide(); this.stop(); } }
模板的实现BMWCar1
/** * 基于总部提供的模板实现的BMWCar1 * @author test11 */ public class BMWCar1 extends BMWTemplate{ @Override public void start() { System.out.println("BMWCar1启动"); } @Override public void alarm() { System.out.println("BMWCar1鸣笛"); } @Override public void guide() { System.out.println("BMWCar1导航"); } @Override public void stop() { System.out.println("BMWCar1停车"); } }
模板的实现BMWCar2
/** * 基于总部提供的模板实现的BMWCar2 * @author test11 */ public class BMWCar2 extends BMWTemplate{ @Override public void start() { System.out.println("BMWCar2启动"); } @Override public void alarm() { System.out.println("BMWCar2鸣笛"); } @Override public void guide() { System.out.println("BMWCar2导航"); } @Override public void stop() { System.out.println("BMWCar2停车"); } }
模板模式用户测试
/** * 模板模式测试 * @author test11 */ public class Demo { public static void main(String[] args) { //车型1测试 BMWCar1 car1 = new BMWCar1(); car1.run(); //车型2测试 BMWCar2 car2 = new BMWCar2(); car2.run(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY