知识卡片

模板方法模式是"父类调用子类方法"的正确实现

普通读书笔记卡 · 1985.a.6

内容

“父类如何调用子类方法”是常见困惑,技术上可用有参构造传入子类实例、反射或静态方法实现, 但都不建议——若需要父类直接调用具体子类,继承关系本身就存疑。正确思路是 [[模板方法模式的两类方法]]:父类调用自己声明的抽象方法,运行时多态自然分派到子类实现, 而非父类主动调用具体子类。发散:遇到”父类需要知道子类细节”的需求,先检查是否已有模板 方法/多态能满足它。

参考来源

- 位置:《设计模式之禅(第2版)》第10章《模板方法模式》(源文件:_epub-src/text/part0046.html) - 结论依据:原文列出三种父类调用子类方法的技术手段并逐一否定其在项目中的可用性,转而说明"父类建立框架,子类在重写了父类部分的方法后,再调用从父类继承的方法,产生不同的结果(而这正是模板方法模式)……曲线救国的方式实现了父类依赖子类的场景,模板方法模式就是这种效果"。 - 原始内容:父类是否可以调用子类的方法呢?我的回答是能,但强烈地、极度地不建议这么做……父类建立框架,子类在重写了父类部分的方法后,再调用从父类继承的方法,产生不同的结果(而这正是模板方法模式)……曲线救国的方式实现了父类依赖子类的场景。