Java设计模式:模板方法模式

模板方法模式

定义:

定义一个操作的算法骨架,而将一些步骤延迟到子类。模板方法模式使得子类可以改变一个算法的结构,可重定义该算法的某些特定步骤。

模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟到子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤,不同的子类可以以不同的方式来实现这些逻辑。

优点:

符合开闭原则,能够实现代码复用,将不变的行为转移到父类,去除子类中的重复代码。

结构:

抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

代码示例:

举个例子,以准备去学校所要做的工作(prepareGotoSchool)为例,假设需要分三步:穿衣服(dressUp),吃早饭(eatBreakfast),带上东西(takeThings)。学生和老师要做得具体事情肯定有所区别。

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


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();
     }
}

参照博客:
Java设计模式之行为型:模板方法模式

猜你喜欢

转载自blog.csdn.net/qq_40042416/article/details/129387321