# 23种设计模式-模板方法模式

# 1.模板方法模式

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

# 优缺点

# 优点:

提高代码复用性 提高扩展型 符合开闭原则

# 缺点:

增加复杂性 继承缺点

# 使用场景

# 实现方式

# 抽象类AbstractClass:

//抽象类定义整个流程骨架
public abstract class AbstractPerson{
     //模板方法,使用final修改,防止子类改变算法的实现步骤
     public final void prepareGotoSchool(){
          dressUp();
          eatBreakfast();
          takeThings();
     }
     //以下是不同子类根据自身特性完成的具体步骤
     protected abstract void dressUp();
     protected abstract void eatBreakfast();
     protected abstract void takeThings();
}

# 具体类ConcreteClass:

public class Student extends AbstractPerson{
     @Override
     protected void dressUp() {
          System.out.println("穿校服");
     }
     @Override
     protected void eatBreakfast() {
          System.out.println("吃妈妈做好的早饭");
     }
 
     @Override
     protected void takeThings() {
          System.out.println("背书包,带上家庭作业和红领巾");
     }
}

public class Teacher extends AbstractPerson{
     @Override
     protected void dressUp() {
          System.out.println("穿工作服");
     }
     @Override
     protected void eatBreakfast() {
          System.out.println("做早饭,照顾孩子吃早饭");
     }
 
     @Override
     protected void takeThings() {
          System.out.println("带上昨晚准备的考卷");
     }
}

# 测试类

public class Client {
     public static void main(String[] args) {
     Student student = new Student();
     student.prepareGotoSchool();
 
     Teacher teacher  = new Teacher();
     teacher.prepareGotoSchool();
     }
}

参考博客:https://blog.csdn.net/a745233700/article/details/83662336