模板方法模式
定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
1.使用场景
定义一个算法骨架,规定好具体执行流程,但每个步骤可以留作抽象方法,留给子类来实现。
在重构时,将相同的代码抽取到父类中,通过钩子函数约束其行为。
2.角色
- AbsTemplate 抽象类,定义了一套算法框架
- ConcreteA 具体实现类A
3.实践
// 抽象模板
public abstract class AbstractComputer {
protected void powerOn(){
System.out.println("开启电源!");
}
protected void checkHardware(){
System.out.println("硬件检查");
}
protected void loadOS(){
System.out.println("载入操作系统");
}
protected void login(){
System.out.println("登陆操作");
}
public final void startUp(){
System.out.println("************开机start************");
powerOn();
checkHardware();
loadOS();
login();
System.out.println("************开机end************");
}
}
// 具体实现类
public class MilitaryComputer extends AbstractComputer{
@Override
protected void checkHardware() {
super.checkHardware();
System.out.println("检查硬件防火墙!");
}
@Override
protected void login() {
super.login();
System.out.println("进行复杂用户认证!");
}
}
4.总结
提取了不变部分(执行流程、公共方法),变化部分(抽象方法)留给子类实现。
一般模板方法中都要加上final关键字,来避免被恶意覆盖。
本文介绍了模板方法模式的定义、使用场景和实践应用,展示了如何通过抽象类和子类实现算法步骤的灵活性。核心在于提取公共流程并允许子类重写关键步骤。
1214

被折叠的 条评论
为什么被折叠?



