好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java中常用的设计模式之模板模式详解

优点

封装不变部分,扩展可变部分。

提取公共代码,便于维护。

行为由父类控制,子类实现。

缺点

每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景

1.有多个子类共有的方法,且逻辑相同。

2.重要的、复杂的方法,可以考虑作为模板方法。

一、实现方式

假设一个场景,我们在玩游戏的时候,都需要初始化加载游戏,然后开始游戏,最后结束游戏,这像是一套模板一样的操作,但是具体的实现方法却不同,例如:LOL 游戏与 CF 游戏的加载资源肯定不同,游戏的内容也不同。

1、游戏抽象类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package com.asurplus测试数据mon.template;

/**

  * 游戏抽象类

  */

public abstract class Game {

     // 初始化游戏

     abstract void init();

     // 开始游戏

     abstract void start();

     // 结束游戏

     abstract void end();

     // 模板

     public final void play() {

         // 初始化游戏

         init();

         // 开始游戏

         start();

         // 结束游戏

         end();

     }

}

2、LOL游戏类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package com.asurplus测试数据mon.template;

import lombok.extern.slf4j.Slf4j;

/**

  * LOL游戏

  */

@Slf4j

public class LolGame extends Game {

     @Override

     void init() {

         log.info( "初始化 LOL 游戏" );

     }

     @Override

     void start() {

         log.info( "LOL 游戏开始" );

     }

     @Override

     void end() {

         log.info( "LOL 游戏结束" );

     }

}

3、CF游戏类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package com.asurplus测试数据mon.template;

import lombok.extern.slf4j.Slf4j;

/**

  * CF游戏

  */

@Slf4j

public class CfGame extends Game {

     @Override

     void init() {

         log.info( "初始化 CF 游戏" );

     }

     @Override

     void start() {

         log.info( "CF 游戏开始" );

     }

     @Override

     void end() {

         log.info( "CF 游戏结束" );

     }

}

二、测试

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.asurplus测试数据mon.template;

 

/**

  * 模板模式

  */

public class TestMain {

     public static void main(String[] args) {

         // LOL 游戏

         Game lolGame = new LolGame();

         lolGame.play();

         System.out.println();

         // CF 游戏

         Game cfGame = new CfGame();

         cfGame.play();

     }

}

输出结果

可以看出,一套模板,可以有多个实现方式,从而实现了我们的工厂模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!   

原文链接:https://blog.csdn.net/qq_40065776/article/details/123150650

查看更多关于Java中常用的设计模式之模板模式详解的详细内容...

  阅读:16次