博客
关于我
设计模式_行为型模式 -《模板方法模式》
阅读量:796 次
发布时间:2023-03-25

本文共 990 字,大约阅读时间需要 3 分钟。

模板方法模式是行为型设计模式中的一种,用于处理算法的整体步骤已知,但某些步骤的具体实现可能因环境而异的情况。以下是模板方法模式的详细分析和优化后的内容:

模板方法模式

定义

模板方法模式定义一个操作的算法骨架,并将算法的某些步骤延迟到子类中实现。子类可以在不修改算法结构的情况下,扩展特定步骤的行为。

结构

  • 抽象类(Abstract Class)

    • 负责提供算法的骨架,包含模板方法和基本方法。
    • 模板方法:定义算法的步骤顺序,通常为final方法,防止子类修改。
    • 基本方法
      • 抽象方法(Abstract Method):由抽象类声明,子类必须实现。
      • 具体方法(Concrete Method):由抽象类或具体类直接实现,子类可覆盖或直接继承。
      • 钩子方法(Hook Method):在抽象类中预定义,通常用于逻辑判断,如isXxx方法,返回boolean类型。
  • 具体子类(Concrete Class)

    • 实现抽象类中的抽象方法和钩子方法,定义算法的具体步骤。
  • 示例

    炒菜流程

    • 抽象类定义cookProcess()方法,调用倒油、热油、倒蔬菜、倒调料和翻炒步骤。
    • 倒油和热油在抽象类中直接实现为具体方法。
    • 倒蔬菜和倒调料由具体子类实现为抽象方法。
    • 翻炒在抽象类中直接实现为具体方法。

    优点

    • 提高复用性:将相同逻辑集中在抽象类中,减少重复代码。
    • 实现反向控制:子类决定父类步骤的执行,符合开闭原则。
    • 灵活性高:子类可扩展父类行为,适应不同需求。

    缺点

    • 子类数量多,系统复杂度增加。
    • 代码阅读难度大,反向控制逻辑难以理解。

    适用场景

    • 算法步骤固定但某些部分可变。
    • 需要子类决定父类步骤是否执行。

    JDK示例(InputStream类)

    • read()方法:无参read方法为抽象方法,子类必须实现。
    • 带三个参数的read方法为模板方法,定义读取多个字节的流程,反向调用无参read方法。

    AQS中的模板方法

    • acquire()方法:调用tryAcquire,留给子类实现同步状态获取逻辑。
    • ReentrantLock的Sync内部类实现了tryAcquire,展示模板方法的实际应用。

    总结

    模板方法模式通过抽象类和子类结合,实现了算法的可扩展性和灵活性,适用于需要反向控制和灵活扩展的场景。它在Java中的应用广泛,如InputStream和AQS设计,展示了其在实际开发中的有效性。

    转载地址:http://kkhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现滑动平均滤波(附完整源码)
    查看>>
    Objective-C实现滤波器(附完整源码)
    查看>>
    Objective-C实现灰度直方图(附完整源码)
    查看>>
    Objective-C实现点的多项式算法(附完整源码)
    查看>>
    Objective-C实现牛顿下山法(附完整源码)
    查看>>
    Objective-C实现牛顿插值法(附完整源码)
    查看>>
    Objective-C实现牛顿法求一个数的平方根算法 (附完整源码)
    查看>>
    Objective-C实现牛顿法算法(附完整源码)
    查看>>
    Objective-C实现牛顿迭代法(附完整源码)
    查看>>
    Objective-C实现特征脸算法(附完整源码)
    查看>>
    Objective-C实现状态模式(附完整源码)
    查看>>
    Objective-C实现狄克斯特拉算法(附完整源码)
    查看>>
    Objective-C实现狄克斯特拉算法(附完整源码)
    查看>>
    Objective-C实现猜数字游戏(附完整源码)
    查看>>
    Objective-C实现猜数字算法(附完整源码)
    查看>>
    Objective-C实现猴子爬山算法(附完整源码)
    查看>>
    Objective-C实现环形缓冲区(附完整源码)
    查看>>
    Objective-C实现生产者和消费者问题(附完整源码)
    查看>>
    Objective-C实现生产者消费者问题(附完整源码)
    查看>>
    Objective-C实现生成 Mandelbrot 曼德勃罗集图像算法 (附完整源码)
    查看>>