行为型-模板方法模式(Template Method)

介绍

模板方法模式是一种行为设计模式 它在超类中定义了一个算法的框架 允许子类在不修改结构的情况下重写算法的特定步骤

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法来处理。

模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来提现它的优势。

模板方法模式就是提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

模板方法设计模式

真实世界类比

建造大型房屋

可对典型的建筑方案进行微调以更好地满足客户需求

模板方法可用于建造大量房屋 标准房屋建造方案中可提供几个扩展点 允许潜在房屋业主调整成品房屋的部分细节

每个建造步骤 (例如打地基 建造框架 建造墙壁和安装水电管线等 都能进行微调 这使得成品房屋会略有不同

模板方法模式示例:

我们将创建一个定义操作的 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 “方法不允许 错误响应的 do­XXX()方法 你可随时对其进行重写

 

转:https://www.runoob.com/design-pattern/template-pattern.html

转:https://refactoring.guru/

 

posted @ 2020-11-27 09:49  fangyanr  阅读(92)  评论(0编辑  收藏  举报