首页 > 其他 > 详细

模板模式

时间:2020-01-21 00:52:09      阅读:83      评论:0      收藏:0      [点我收藏+]

模式介绍

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

模式优点

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

模式缺点

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

使用场景

1、有多个子类共有的方法,且逻辑相同。
2、重要的、复杂的方法,可以考虑作为模板方法。

系统建模

无。

系统实现

/**
 * 游戏抽象类,其中play为模板方法
 */
public abstract class Game {
   abstract void initializeGame();
   abstract void startGame();
   abstract void endGame();
   // 钩子方法,子类看情况来决定是否覆盖
   public void otherOperation(){}

   public final void play(){
      initializeGame();
      startGame();
      endGame();
      otherOperation();
   }
}

/**
 * 足球类
 */
public class Football extends Game {
   void endGame() {
      System.out.println("Football Game Finished!");
   }
 
   void initializeGame() {
      System.out.println("Football Game Initialized! Start playing.");
   }
 
   void startGame() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

/**
 * 板球类
 */
public class Cricket extends Game {
   void endGame() {
      System.out.println("Cricket Game Finished!");
   }
 
   void initializeGame() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }
 
   void startGame() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }

   public void otherOperation() {
    System.out.println("see you next time!");
   }
}
/*
 * 客户端
 */
public class Client {
    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!
see you next time!
***************************************************
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!

模板模式

原文:https://www.cnblogs.com/feiqiangsheng/p/12219912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!