定义
定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
优点及缺点
优点
- 封装不变,扩展可变
- 提取公共部分代码,易于维护
- 行为由父类控制,子类实现
缺点
- 抽象类定义了抽象方法,子类的多态会影响父类的结果
使用场景
子类有公有的方法,逻辑基本相同,可以通过钩子函数约束其行为达到不同的行为效果。父类抽象共性,子类实现个性。
示例代码
public abstract class HummerModel
{
public abstract void start();
public abstract void alerm();
public abstract void engineBoom();
public abstract void stop();
public void run(){
this.start();
this.engineBoom();
if(isAlarm()){
this.alerm();
}
this.stop();
}
//钩子函数,子类对该方法进行重写,父类根据子类的行为而产生影响
public boolean isAlarm(){
return true;
}
}
public class Hummer1 extends HummerModel
{
private boolean isAlarm = true;
//子类设置钩子
public void setAlarm(boolean isAlarm)
{
this.isAlarm = isAlarm;
}
@Override
public void start()
{
System.out.println("H1 start...");
}
@Override
public void alerm()
{
System.out.println("H1 alerm...");
}
@Override
public void engineBoom()
{
System.out.println("H1 engineBoom...");
}
@Override
public void stop()
{
System.out.println("H1 stop...");
}
@Override
public boolean isAlarm()
{
return this.isAlarm;
}
}