原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-template-pattern.html
更多教程:光束云 - 免费课程html
序号 | 文内章节 | 视频 |
---|---|---|
1 | 概述 | - |
2 | 实现 | - |
请参照如上章节导航
进行阅读java
在模板模式(Template Pattern
)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类能够按须要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。程序员
意图:算法
定义一个操做中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤。设计模式
主要解决:架构
一些方法通用,却在每个子类都从新写了这一方法。ide
什么时候使用:.net
有一些通用的方法。设计
如何解决:code
将这些通用算法抽象出来。
关键代码:
在抽象类实现,其余步骤在子类实现。
应用实例:
优势:
缺点:
每个不一样的实现都须要一个子类来实现,致使类的个数增长,使得系统更加庞大。
使用场景:
注意事项:
为防止恶意操做,通常模板方法都加上 final
关键词。
咱们将建立一个定义操做的 Game
抽象类,其中,模板方法设置为 final
,这样它就不会被重写。
Cricket
和 Football
是扩展了 Game
的实体类,它们重写了抽象类的方法。
TemplatePatternDemo
,咱们的演示类使用 Game
来演示模板模式的用法。
建立一个抽象类,它的模板方法被设置为 final
。
Game.java
,代码以下:
public abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); //模板 public final void play(){ //初始化游戏 initialize(); //开始游戏 startPlay(); //结束游戏 endPlay(); } }
建立扩展了上述类的实体类。
Cricket.java
,代码以下:
public class Cricket extends Game { @Override void endPlay() { System.out.println("Cricket Game Finished!"); } @Override void initialize() { System.out.println("Cricket Game Initialized! Start playing."); } @Override void startPlay() { System.out.println("Cricket Game Started. Enjoy the game!"); } }
Football.java
,代码以下:
public class Football extends Game { @Override void endPlay() { System.out.println("Football Game Finished!"); } @Override void initialize() { System.out.println("Football Game Initialized! Start playing."); } @Override void startPlay() { System.out.println("Football Game Started. Enjoy the game!"); } }
使用 Game
的模板方法 play()
来演示游戏的定义方式。
TemplatePatternDemo.java
,代码以下:
public class TemplatePatternDemo { public static void main(String[] args) { Game game = new Cricket(); game.play(); System.out.println(); game = new Football(); game.play(); } }
执行程序,输出结果:
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!
若是对课程内容感兴趣,能够扫码关注咱们的
公众号
或QQ群
,及时关注咱们的课程更新