设计模式模版方法

it2024-07-22  37

概述

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

优缺点

优点

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

缺点

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

例子

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

抽象模版

/** * @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(); } 挂号 化验单、检查单等 缴费 取西药 -------------------------- 挂号 望闻问切 缴费 取中药

总结

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

最新回复(0)