模板模式:具体的步骤延迟到子类中实现
1.工厂模式:提供创建对象的接口2.单例模式:生成只存在一个的实例3.桥接模式:将类的功能层次和实现层次分离,动态结合4.享元模式:避免大量相同开销5.原型模式:通过复制生成实例6.建造者模式:组装复杂实例7.职责链模式:推卸责任
8.模板模式:具体的步骤延迟到子类中实现
9.迭代器模式:一个个遍历10.外观模式:隐藏了复杂系统的复杂性,并提供一个简单的接口来访问系统11.代理模式:为其他对象提供一种代理以控制对这个对象的访问12.适配器模式:将两个不兼容的类纠合在一起13.组合模式:处理树形结构数据14.装饰器模式:动态给一个对象添加一些额外的职责15.命令模式:命令也是类16.访问者模式:访问数据结构并处理数据17.观察者模式:发送状态变化通知18.状态模式:用类表示状态19.策略模式:整体替换算法20.解释器模式:语法规则也是类21.中介者模式:只有一个仲裁者22.备忘录模式:保存对象状态模板模式是一种行为设计模式,它允许将算法的结构与实现分开,从而使得实现可以在不改变算法结构的情况下被重用。模板模式的核心思想是定义一个抽象基类,其中包含了算法的骨架,但是具体的步骤延迟到子类中去实现。这样一来,同一套算法的不同实现可以共享同一个基类代码,从而避免了代码的重复。简单来说,就是抽象类!
示例代码
abstract class Car { // 这里定义了汽车行驶的算法框架,包括启动、加速、减速和停止 public void drive() { start(); accelerate(); brake(); stop(); } // 这些方法是算法的具体步骤,由子类去实现 protected abstract void start(); protected abstract void accelerate(); protected abstract void brake(); protected abstract void stop(); } class ManualCar extends Car { protected void start() { System.out.println("手动挂挡启动"); } protected void accelerate() { System.out.println("手动加速"); } protected void brake() { System.out.println("手动刹车"); } protected void stop() { System.out.println("手动停车"); } } class AutomaticCar extends Car { protected void start() { System.out.println("自动启动"); } protected void accelerate() { System.out.println("自动加速"); } protected void brake() { System.out.println("自动刹车"); } protected void stop() { System.out.println("自动停车"); } } public class TemplatePatternExample { public static void main(String[] args) { Car manualCar = new ManualCar(); manualCar.drive(); Car automaticCar = new AutomaticCar(); automaticCar.drive(); } }
Car
是一个抽象基类,其中包含了汽车行驶的算法框架。具体的步骤由子类ManualCar
和AutomaticCar
去实现。在 TemplatePatternExample
类中,我们分别创建了一个手动挡汽车和一个自动挡汽车,并分别调用了它们的drive()方法。
通过模板模式,我们可以复用相同的算法框架,但是根据需要可以有不同的实现方式。例如,在上述示例中,我们可以轻松地添加更多类型的汽车,而不需要修改基类的代码。同时,由于具体的实现被延迟到子类中去实现,因此我们也可以避免代码重复造成的问题。
合集:
Java设计模式
分类:
Java设计模式 / 行为型模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性