模板模式(二十三)

Andy 2023年06月09日 635次浏览

一个抽象类公开定义了执行它的方法的方式/模板
意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

感觉特别像父类把东西都写好了,你只需要加点东西就成跟自己的要求相同,并形成符合自己条件的类

菜鸟案例:
我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。
TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。
image.png
这就不拆图了,太好理解了,自己平常说不定就用过,如果你学过SSM或者学过面向接口编程,这玩意你绝对不陌生。
和他们还是有本质的区别,模板模式里面的方法层面谁先执行和谁后执行都已经确定好了,包括怎么执行,但是你可以修改方法内部的逻辑结构以达到自己的要求。而可以修改的在抽象类里都成抽象方法了

直接上代码,看看就行,很简单
(1)创建一个抽象类,它的模板方法被设置为 final。
Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();
 
   //模板,这里的用final修饰了,子类就不可以修改了,这个方法内部已经确定了
   public final void play(){
 
      //初始化游戏
      initialize();
 
      //开始游戏
      startPlay();
 
      //结束游戏
      endPlay();
   }
}

(2)创建扩展了上述类的实体类。
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!");
   }
}

(3)使用 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!
————————————————
版权声明:本文为CSDN博主「胖墩的IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43113679/article/details/99585659