《Java设计模式之模板模式》

《模板模式》

  模板模式:定义一个算法结构,让部分步骤延迟到子类去实现,使得子类不得改变算法结构就可以重定义算法的某些特定本步骤。
  
  模板模式组成:
   抽象父类:实现了一个模板方法,定义了一个算法骨架,部分算法延迟到子类实现
   具体实现类:实现父类中抽象的算法。

  以魔兽世界战士为例, 代码如下:
//抽象父类
public abstract class Warrior {
	//定义的算法步骤,不能被子类覆盖
	public final void attack(){
		//父类中已经实现不可覆盖的方法
		takeOutWeapon();
		//需要子类实现的两个抽象方法
		attack1();
		attack2();
		//子类可选择实现的空方法
		attack3();
	}
	public final void takeOutWeapon(){
		System.out.println("掏出武器");
	}
	public void attack3(){}
	public abstract void attack1();
	public abstract void attack2();
}
//具体实现子类
public class NoobWarrior extends Warrior {
	@Override
	public void attack1() {
		System.out.println("普通攻击");
	}
	@Override
	public void attack2() {
		System.out.println("英勇打击");
	}
}
public class NbWarrior extends Warrior {
	@Override
	public void attack1() {
		System.out.println("巨龙打击");
	}
	@Override
	public void attack2() {
		System.out.println("致死打击");
	}
	@Override
	public void attack3() {
		System.out.println("斩杀");
	}
}
//测试
public class TemplateTest {
	@Test
	public void testTemplate(){
		Warrior w1 = new NbWarrior();
		w1.attack();
		
		Warrior w2 = new NoobWarrior();
		w2.attack();
	}
}

我们发现上述示例抽象父类中有一个空方法attack3(),它可以被称为“钩子”,即子类可以选择是否覆盖该方法,更方便我们进行扩展。

 总结

优点:
1.将不变的行为提取到了父类,去除了子类中的重复代码
2.拓展新的算法时,只需要再创建一个新的子类即可,更易于扩展

模板模式和策略模式的区别:
1.模板模式使用的继承,而策略模式使用的组合
2.模板模式中子类只实现部分变化的算法,所有不会有重复的代码,而策略模式而是通过组合实现所有的算法
3.模板模式采用的继承,所以在编译时就确定了算法的实现,而策略模式使用的组合可以动态的实现算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值