设计模式二十三:模板方法模式(Template Method Pattern)

这篇具有很好参考价值的文章主要介绍了设计模式二十三:模板方法模式(Template Method Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义了一个算法的框架,将算法的具体步骤延迟到子类中实现。这样可以在不改变算法结构的情况下,允许子类重写算法的特定步骤以满足自己的需求

模版方法使用场景

  1. 算法框架固定,但具体步骤可以变化:当你有一个算法的整体结构是固定的,但其中某些步骤的实现可能因情境不同而变化时,可以使用模板方法模式。这使得你可以在不改变整体结构的情况下,通过子类来定制特定步骤的实现。
  2. 避免代码重复:当你有多个类中的方法具有相似的步骤,但实现细节有所不同时,可以将这些相似的步骤提取到一个抽象类的模板方法中,从而避免代码重复。
  3. 框架或库的设计:在框架或库的设计中,通常会定义一些通用的算法框架,但具体实现需要留给使用者来完成。模板方法模式在这种情况下可以帮助定义框架的核心逻辑,同时留下扩展点供使用者进行自定义。
  4. 生命周期方法:当需要确保对象在特定的生命周期阶段执行特定步骤时,模板方法模式可以派上用场。比如在资源管理、初始化和销毁等场景下。
  5. 代码的扩展和维护:模板方法模式遵循开闭原则,当需要添加新的功能或修改算法的部分步骤时,只需要新增或修改子类,而不需要改动抽象类的代码,从而提升了代码的可扩展性和可维护性。

模版方法主要角色

  1. 抽象类(Abstract Class):定义了一个模板方法,它是一个包含算法框架的方法,其中的具体步骤可以是抽象方法或已实现的方法。抽象类还可以包含一些通用方法,这些方法在模板方法中被使用。
  2. 具体子类(Concrete Subclass):继承抽象类并实现其中的抽象方法,从而完成算法的具体步骤。每个具体子类可以根据需要实现自己的逻辑。

模版方法java代码实例

abstract class CaffeineBeverage {
    final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    abstract void brew();

    abstract void addCondiments();

    void boilWater() {
        System.out.println("Boiling water");
    }

    void pourInCup() {
        System.out.println("Pouring into cup");
    }
}

class Coffee extends CaffeineBeverage {
    void brew() {
        System.out.println("Dripping coffee through filter");
    }

    void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

class Tea extends CaffeineBeverage {
    void brew() {
        System.out.println("Steeping the tea");
    }

    void addCondiments() {
        System.out.println("Adding lemon");
    }
}

public class TemplateMethodPatternDemo {
    public static void main(String[] args) {
        CaffeineBeverage coffee = new Coffee();
        coffee.prepareRecipe();

        CaffeineBeverage tea = new Tea();
        tea.prepareRecipe();
    }
}

在这个示例中,CaffeineBeverage 是抽象类,定义了制作咖啡因饮料的模板方法 prepareRecipe(),以及具体步骤中的通用方法。Coffee 和 Tea 是具体子类,分别实现了 brew() 和 addCondiments() 方法。在主程序中,我们创建了咖啡和茶的实例,并调用了它们的 prepareRecipe() 方法,实现了整个制作过程

模版方法优缺点

优点:

  1. 代码复用性
    模板方法模式鼓励将相同的代码逻辑放在抽象类中,从而避免在多个具体类中重复实现相同的代码,提高了代码的复用性。
  2. 高层逻辑抽象
    模板方法将高层的算法逻辑抽象到抽象类中,使得具体子类只需要关注特定步骤的实现,而无需考虑整体算法的结构。
  3. 固定算法框架
    模板方法定义了一个算法的框架,确保了整个算法的结构一致性。这有助于遵循最佳实践并减少错误。
  4. 易于维护
    由于相同的代码逻辑集中在抽象类中,修改算法逻辑或添加新特性只需要在一个地方进行修改,减少了维护的复杂性。
  5. 灵活性
    具体子类可以通过重写特定步骤来实现个性化需求,从而在保持整体框架不变的情况下增加灵活性。

缺点:文章来源地址https://www.toymoban.com/news/detail-671943.html

  1. 限制子类的自由度
    尽管模板方法模式提供一定程度的灵活性,但子类的扩展通常被限制在模板定义的框架内。这可能导致某些情况下子类需要强行适应框架,而不是完全自由地设计。
  2. 增加类的数量
    使用模板方法模式通常会引入抽象类和具体子类,可能会增加类的数量,增加了代码的复杂性。
  3. 不适合每个情况
    并非所有算法都适合使用模板方法模式。如果算法的步骤变化较小或步骤变化较大,使用其他模式可能更合适。
  4. 复杂性增加
    尽管模板方法模式可以帮助整理算法的结构,但在某些情况下可能会引入复杂性,尤其是当算法本身变得复杂时

到了这里,关于设计模式二十三:模板方法模式(Template Method Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式(二十二)模板方法

    定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的特定步骤。模板方法是一种类行为型模式 模板方法模式结构比较简单,其核心是抽象类和其中的模板方法的设计,包含以下两个角色: 1、AbstractClas

    2024年01月22日
    浏览(35)
  • 软件设计模式系列之二十四——模板方法模式

    在软件设计领域,设计模式是一组被反复使用、多次实践验证的经典问题解决方案。其中,模板方法模式是一种行为型设计模式,用于定义一个算法的骨架,将算法中的某些步骤延迟到子类中实现,从而使子类可以重新定义算法的某些特定步骤,同时保持算法的整体结构不变

    2024年02月08日
    浏览(45)
  • 设计模式第15讲——模板模式(Template)

    模板模式是一种基于 继承 实现的设计模式,它是 行为型 的模式。 主要思想是将定义的算法抽象成一组步骤,在抽象类种定义算法的骨架,把具体的操作留给子类来实现。 通俗地说,模板模式就是将某一行为制定一个框架,然后子类填充细节。比如说做菜,流程通常就是洗

    2024年02月11日
    浏览(41)
  • 二十三种设计模式:工厂模式

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。工厂模式通过使用工厂方法来解决这个问题,该方法将对象的创建委托给子类来处理。 在工厂模式中,我们定义一个抽象工厂类,它包含一个抽象的工厂方法,该方法返回一个

    2024年02月07日
    浏览(54)
  • 二十三种设计模式第十三篇--享元模式

    享元模式,主要就是一种池化方案,主要用于创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于 结构型模式 ,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式,尝试重用现有的同类对象,如果未找到相同匹配的对象,那么就去创

    2024年02月12日
    浏览(46)
  • 二十三种设计模式第二十篇--备忘录模式

    备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。 保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备忘录的负责人对象中。 备忘

    2024年02月14日
    浏览(42)
  • 二十三种设计模式(待更)

    资料来源于老师讲解以及大佬的设计模式仓库 zhengqingya 将对象和类按某种布局组成更大的结构,并同时保持结构的灵活和⾼效。 1.适配器 适配器就是将原先无法直接使用的某个接口或者类通过适配器模式转换为可以使用的接口或者类。将一个类的接口转换成客户希望的另外

    2024年02月08日
    浏览(43)
  • 设计模式(二十三)访问者

    表示一个作用于某对象结构中的各个元素的操作。访问者模式让你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式 访问者模式是一种较为复杂的行为型模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素

    2024年02月19日
    浏览(39)
  • 软件设计模式系列之二十三——策略模式

    策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态选择算法的行为。这意味着你可以定义一系列算法,将它们封装成独立的策略对象,然后根据需要在不修改客户端代码的情况下切换这些算法。策略模式有助于解决问题领域中不同行为的变化和扩展,同时

    2024年02月08日
    浏览(40)
  • 设计模式(二十三)——解释器模式(Interpreter )

    解释器模式(Interpreter ) 实现了一个表达式接口,该接口解释一个特定的上下文 应用 编译器,正则表达式,SQL解析 实现 实现一个一位数的加法运算

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包