介绍
模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法来处理。
模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来提现它的优势。
模板方法模式就是提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
真实世界类比
可对典型的建筑方案进行微调以更好地满足客户需求。
模板方法可用于建造大量房屋。 标准房屋建造方案中可提供几个扩展点, 允许潜在房屋业主调整成品房屋的部分细节。
每个建造步骤 (例如打地基、 建造框架、 建造墙壁和安装水电管线等) 都能进行微调, 这使得成品房屋会略有不同。
模板方法模式示例:
我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。
TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。
执行程序,输出结果:
Cricket Game Initialized! Start playing. Cricket Game Started. Enjoy the game! Cricket Game Finished! Football Game Initialized! Start playing. Football Game Started. Enjoy the game! Football Game Finished!
在 Java 中使用模式
识别方法: 模版方法可以通过行为方法来识别, 该方法已有一个在基类中定义的 “默认” 行为。
1、java.io.InputStream
、 java.io.OutputStream
、 java.io.Reader
和 java.io.Writer
的所有非抽象方法。
2、java.util.AbstractList
、 java.util.AbstractSet
和 java.util.AbstractMap
的所有非抽象方法。
3、javax.servlet.http.HttpServlet
, 所有默认发送 HTTP 405 “方法不允许” 错误响应的 doXXX()
方法。 你可随时对其进行重写。
转:https://www.runoob.com/design-pattern/template-pattern.html
转:https://refactoring.guru/