模板模式(Template Pattern)

模板模式(Template Pattern)

一个抽象类(模板)定义了类中方法的执行方式,子类对模板中的方法进行具体实现,调用的时候以抽象类中的方式进行调用。
目的:定义一个类中方法的骨架,将特定实现延续到子类中。
主要解决:一些方法通用,却在每一个子类中都重写了这个方法。
何时使用:一些通用的方法。
如何解决:将这些通用算法抽象在模板中。
关键代码:在抽象类中实现,其他步骤在子类中实现。
使用场景:多个子类有共同的方法,且逻辑相同;重复复杂的方法。
优点:封装不需要改变的部分,扩展可以改变的部分;提取公共代码,便于维护;行为由父类控制,(具体)类容由子类实现。
缺点:每一个不同的子类实现都需要写一个模板的子类,子类个数增加,系统庞大。
注意事项:防止恶意操作,模板方法一般都加final关键字。

创建抽象类(模板)

 1 /**
 2  * @author: wooch
 3  * @create: 2020/02/14
 4  */
 5 public abstract class Game {
 6     abstract void initialize();
 7     abstract void startPlay();
 8     abstract void endPlay();
 9     // 模板
10     public final void play(){
11         // 初始化
12         initialize();
13         // 开始
14         startPlay();
15         // 结束
16         endPlay();
17     }
18 }

创建子类(Cricket)

 1 /**
 2  * @author: wooch
 3  * @create: 2020/02/14
 4  */
 5 public class Cricket extends Game {
 6     @Override
 7     void initialize() {
 8         System.out.println("Cricket Game Initialized!");
 9     }
10 
11     @Override
12     void startPlay() {
13         System.out.println("Cricket Game Started.");
14     }
15 
16     @Override
17     void endPlay() {
18         System.out.println("Cricket Game Finished.");
19     }
20 }

创建子类(Football)

 1 /**
 2  * @author: wooch
 3  * @create: 2020/02/14
 4  */
 5 public class Football extends Game {
 6     @Override
 7     void initialize() {
 8         System.out.println("Football Game Initialized!");
 9     }
10 
11     @Override
12     void startPlay() {
13         System.out.println("Football Game Started.");
14     }
15 
16     @Override
17     void endPlay() {
18         System.out.println("Football Game Finished.");
19     }
20 }

演示结果

 1 /**
 2  * @author: wooch
 3  * @create: 2020/02/14
 4  */
 5 public class TemplatePatternTest {
 6     public static void main(String[] args) {
 7         Game game = new Cricket();
 8         game.play();
 9         System.out.println();
10         game = new Football();
11         game.play();
12     }
13 }

运行结果

1 Cricket Game Initialized!
2 Cricket Game Started.
3 Cricket Game Finished.
4 
5 Football Game Initialized!
6 Football Game Started.
7 Football Game Finished.

猜你喜欢

转载自www.cnblogs.com/baishouzu/p/12306071.html