标签:des string desc 模板方法 div alt method tcl 效果
模板方法模式
模板方法模式(Template Method),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[DP]
优点:
缺点:
AbstractClass:拥有模板方法的父类
ConcreteClass:使用模板方法的子类
例子:两个学生考试,试卷题目一样,答案不一样,打印出来
父类
/** * @ Author :fonxi * @ Date :2019/5/22 16:00 * @ Description:模板方法类 */ public abstract class AbstractClass { abstract String primitiveOperation1(); abstract String primitiveOperation2(); public void templateMethod(){ System.out.print("设计模式有多少种:"); System.out.println(primitiveOperation1()); System.out.print("抽象类中不能有非抽象方法:"); System.out.println(primitiveOperation2()); } }
使用模板方法的子类
/** * @ Author :fonxi * @ Date :2019/5/22 16:02 * @ Description:实现类 */ public class ConcreteClass1 extends AbstractClass{ @Override String primitiveOperation1() { return "23"; } @Override String primitiveOperation2() { return "错"; } }
/** * @ Author :fonxi * @ Date :2019/5/22 16:10 * @ Description:实现类 */ public class ConcreteClass2 extends AbstractClass { @Override String primitiveOperation1() { return "25"; } @Override String primitiveOperation2() { return "对"; } }
/** * @ Author :fonxi * @ Date :2019/5/22 16:01 * @ Description:客户端调用类 */ public class TestController { public void print(){ AbstractClass abstractClass; abstractClass = new ConcreteClass1(); System.out.println("学生一的试卷:"); abstractClass.templateMethod(); System.out.println("---------------------------------------------------------------------------"); abstractClass = new ConcreteClass2(); System.out.println("学生二的试卷"); abstractClass.templateMethod(); } }
输出:
学生一的试卷: 设计模式有多少种:23 抽象类中不能有非抽象方法:错 --------------------------------------------------------------------------- 学生二的试卷 设计模式有多少种:25 抽象类中不能有非抽象方法:对
把的重复的代码抽取到模板方法当中,起到复用的效果,模板方法模式算是最常用到的设计模式之一了,。
标签:des string desc 模板方法 div alt method tcl 效果
原文地址:https://www.cnblogs.com/fonxi/p/10908817.html