设计模式之模板方法模式

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

实现步骤:

  1. 定义一个抽象类,在类中定义每一步操作的抽象方法,再定义一个final的运行模板方法,使子类无法修改操作流程,只能修改每步操作的具体功能。
//定义一个game抽象类
public abstract class Game {
	abstract void initialize();
   	abstract void startPlay();
   	abstract void endPlay();
	
	//模板
   public final void play(){
      //初始化游戏
      initialize();
      //开始游戏
      startPlay();
      //结束游戏
      endPlay();
   }
}
  1. 编写一个实体类去实现抽象类的方法
public class BasketballGame extend Game {
	@Override
   void endPlay() {
      System.out.println("Basketball Game Finished!");
   }
 
   @Override
   void initialize() {
      System.out.println("Basketball Game Initialized! Start playing.");
   }
 
   @Override
   void startPlay() {
      System.out.println("Basketball Game Started. Enjoy the game!");
   }
}
  1. 使用game定义的模板方法play()来进行游戏
public class PlayGame {
	public static void main(String[] args){
		Game game  = new BasketballGame();
		game.play();
	}
}

最后控制台输出结果为:

Basketball Game Initialized! Start playing.
Basketball Game Started. Enjoy the game!
Basketball Game Finished!

优缺点

优点

  1. 封装不变,扩展可变:父类封装了具体流程以及实现部分不变行为,其它可变行为交由子类进行具体实现;
  2. 流程由父类控制,子类进行实现:框架流程由父类限定,子类无法更改;子类可以针对流程某些步骤进行具体实现;

缺点

  1. 抽象规定了行为,具体负责实现,与通常事物的行为相反,会带来理解上的困难(通俗地说,“父类调用了子类方法”);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值