行为型--模板模式

博客介绍了Java中模板方法模式的概念,即通过抽象类定义模板方法,将部分步骤实现推迟到子类,用户调用抽象类模板方法使用子类方法。还阐述了该模式封装不变、复用代码等优点,以及会增加类个数使系统庞大的缺点,并给出了举例。

概念


用一个抽象类定义一些方法作为实现某个功能的模板(一般设为final),并将模板方法中某些步骤的实现推迟到子类中,使子类可以不改变模板方法内部结构即可重定义模板方法中的某些特定步骤。之后用户通过调用抽象类的模板方法,实现对具体子类方法的使用。

优点:

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

缺点:

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

 

举例


public class Client {
	public static void main(String[] args) {
		Game game1 = new Cricket();
		game1.play();
		System.out.println();
		game1 = new Football();
		game1.play();
	}
}
abstract class Game {
	abstract void initialize();
	abstract void startPlay();
	abstract void endPlay();
	//模板方法:用一些步骤定义了一个功能
	public final void play(){  // 用户要调用的,final
	    //初始化游戏
	    initialize();
	    //开始游戏
	    startPlay();
	    //结束游戏
	    endPlay();
	}
}
// 模板方法中具体步骤的推迟实现
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!");
	}
}
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!");
	}
}

Output:
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!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值