模板方法模式
定义
定义一个操作中的算法骨架,将算法中的一些步骤延伸到子类,使得子类可以不改变算法结构的情况下重新定义该算法的某些特定步骤
架构
模板:模板中定义抽象方法(子类重写)和基本方法(非抽象方法,子类可直接调用);
扩展
应用场景
1、算法整体步骤固定,其中个别容易改变的时候可以使用模板方法模式将容易改变的地方抽离,供子类实现;
2、当多个子类存在公共的行为的时候,可以将其提取出来并集中到一个公共父类中以避免代码重复,首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码;
3、当需要控制子类的扩展;
代码

Abstract
public abstract class Abstract {
/**模板方法*/
public void Template(){
specificMethod();
abstractMethod01();
abstractMethod02();
//子类通过控制hookMethod2的返回值可以控制父类的行为
if (hookMethod2()){
hookMethod1();
}
}
/**具体方法*/
public void specificMethod(){
System.out.println("抽象类中已经实现的方法,子类可以继承和重写");
}
/**钩子方法*/
public void hookMethod1(){}
/**钩子方法*/
public boolean hookMethod2(){
return true;
}
/**抽象方法*/
public abstract void abstractMethod01();
/**抽象方法*/
public abstract void abstractMethod02();
}
Children
public class Children extends Abstract{
@Override
public void abstractMethod01() {
System.out.println("子类实现的抽象方法1");
}
@Override
public void abstractMethod02() {
System.out.println("子类实现的抽象方法2");
}
}
Test
public class Test {
public static void main(String[] args) {
Abstract children = new Children();
children.Template();
}
}
总结
在抽象类中定义方法执行逻辑,可以通过固定条件控制特定方法的执行与否,子类重写抽象类中的方法(添加实际逻辑),最后直接通过调用抽象类中的模板方法来实现逻辑;
自我感觉完全可以在实体类中定义方法执行的顺序和逻辑,直接通过实体类来实现,这个方法的好处可能就是在对象多了之后便于管理了吧。

浙公网安备 33010602011771号