设计模式模版方法

概述

模版方法就是定义一个算法的骨架,将骨架中的特定步骤延迟到子类中。模板方法模式使得子类可以不改变算法的结构即可重新定义(重写)该算法的某些特定步骤。

优缺点

优点

  1. 解决了代码的重复问题
  2. 提高了代码的可扩展性
  3. 规定了代码的执行流程

缺点

  1. 每增加一个实现,必须增加一个子类

例子

中国的伟大在于五千年的历史,诞生了属于自己的医学体系,时至今日,人们看病可以选择中医和西医,两者的去医院看病的大概流程是一致的,但是诊断方法并不同,通过代码形式展现出来。
挂号→诊断→缴费→取药

抽象模版

/**
 * @author yz
 * @version 1.0
 * @date 2020/10/21 11:34
 * 医院模板类
 */
public abstract class Hospital {
    
    

    //治疗
    public void medicalTreatment(){
    
    
        registered();
        diagnosis();
        pay();
        takeMedicine();
    }

    //挂号
    public final void registered(){
    
    
        System.out.println("挂号");
    }

    //诊断
    public abstract void diagnosis();

    //缴费
    public final void  pay(){
    
    
        System.out.println("缴费");
    }

    //取药
    public abstract void takeMedicine();

}

具体实现

/**
 * @author yz
 * @version 1.0
 * @date 2020/10/21 11:40
 * 中医院
 */
public class ChineseHospital extends Hospital{
    
    
    @Override
    public void diagnosis() {
    
    
        System.out.println("望闻问切");
    }

    @Override
    public void takeMedicine() {
    
    
        System.out.println("取中药");
    }
}
/**
 * @author yz
 * @version 1.0
 * @date 2020/10/21 11:40
 * 西医院
 */
public class WestHospital extends Hospital{
    
    
    @Override
    public void diagnosis() {
    
    
        System.out.println("化验单、检查单等");
    }

    @Override
    public void takeMedicine() {
    
    
        System.out.println("取西药");
    }
}

测试类

public static void main(String[] args) {
    
    
        Hospital westHospital=new WestHospital();
        westHospital.medicalTreatment();
        System.out.println("--------------------------");
        Hospital chineseHospital=new ChineseHospital();
        chineseHospital.medicalTreatment();
    }
挂号
化验单、检查单等
缴费
取西药
--------------------------
挂号
望闻问切
缴费
取中药

总结

模版方法是设计模式中很常见的一种设计模式,易学易用,总体上还是依赖倒置原则,程序要依赖于抽象接口,不要依赖于具体实现

猜你喜欢

转载自blog.csdn.net/qq_38306425/article/details/109200377