设计模式-模版方法

  1. 模版方法模式的抽象父类有两类方法:具体方法、模版方法
  2. 将具体处理(干活的)的实现交给子类,父类只是定义方法体,子类负责具体处理(干活的)实现;而将处理框架、规则、顺序、流水、各类异常情况判断  交给父类的“模版方法”。
  3. 特点:
    1. 在模版方法模式中,父类、子类是紧密联系、共同工作的。因此,在子类中实现父类中声明的方法,必须要理解这些抽象方法被调用的时机。在看不到父类源代码的情况下,想要编写出子类是非常困难的
    2. 一般模板方法都加上final关键字,不允许被覆写。
  4. 优点:
    1. 在父类的模版方法中编写了算法,而无需在每个子类中再编写算法。
    2. 把算法中认为是不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展
  5. 缺点:
    1. 按照我们设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类完成具体的事物属性和方法,但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响,这在复杂的项目中,会带来代码阅读的难度,而且也会让新手产生不适感。
  6. 使用场景
    1. 多个子类有公有的方法,并且逻辑基本相同时。
    2. 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
  7. 如何扩展:
    1. 模版方法一般设计为final,不能在子类中多态;为了确保模版方法本身的灵活性,可以在模版方法本身中设置多个判断条件(可以是变量、可以是方法,切可在子类中重构)。判断条件的运行时情况,依据子类的多态重写情况而定。

猜你喜欢

转载自www.cnblogs.com/jiangtao1218/p/9426217.html