模板模式(Template)

概念:准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

         主要角色:

         抽象父类(AbstractClass):实现了模板方法,定义了算法的骨架。

    具体类(ConcreteClass):实现抽象类中的抽象方法,即不同的对象的具体实现细节。

public abstract class GameTemplate{
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();
   //模板
   public final void play(){
      //初始化游戏
      initialize();
      //开始游戏
      startPlay();
      //结束游戏
      endPlay();
   }
}

//实况足球
public class Football extends GameTemplate {
 
   @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!");
   }
}

//LOL英雄联盟
public class LOL extends GameTemplate {
 
   @Override
   void endPlay() {
      System.out.println("LOL Game Finished!");
   }
 
   @Override
   void initialize() {
      System.out.println("LOL Game Initialized! Start playing.");
   }
 
   @Override
   void startPlay() {
      System.out.println("LOL Game Started. Enjoy the game!");
   }
}

//测试类
public class TemplatePatternDemo {
   public static void main(String[] args) {
      GameTemplate game = new LOL();
      game.play();
      game = new Football();
      game.play();      
   }
}

 总结:

         优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

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

          Spring框架中也用到了很多模板模式,比如RestTemplate,JdbcTemplate等。

posted @ 2019-08-09 21:31  Don'tYouSee  阅读(240)  评论(0)    收藏  举报