标签:mono 使用场景 design 模板 oid string 定义 方法 实体
原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-template-pattern.html序号 | 文内章节 | 视频 |
---|---|---|
1 | 概述 | - |
2 | 实现 | - |
请参照如上章节导航
进行阅读
在模板模式(Template Pattern
)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
主要解决:
一些方法通用,却在每一个子类都重新写了这一方法。
何时使用:
有一些通用的方法。
如何解决:
将这些通用算法抽象出来。
关键代码:
在抽象类实现,其他步骤在子类实现。
应用实例:
优点:
缺点:
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
使用场景:
注意事项:
为防止恶意操作,一般模板方法都加上 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群
,及时关注我们的课程更新
Java单体应用 - 架构模式 - 03.设计模式-24.模板模式
标签:mono 使用场景 design 模板 oid string 定义 方法 实体
原文地址:https://blog.51cto.com/14735583/2478142