定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
下面先以一个简单的例子说明一下:
抽象模板类:
package template; public abstract class RoastFish { //通用的步骤:加水 void addWater() { System.out.println("加水"); } //需要定制化的步骤:加哪种鱼(子类定义算法的某些步骤) abstract void addFish(); //通用的步骤:加调料 void addSeasoning() { System.out.println("加调料"); } //通用的步骤:烤制 void roast() { System.out.println("烤制"); } //模板方法,它被声明为final,以免子类改变这个算法的顺序。 public final void cooking() { addWater(); addFish(); addSeasoning(); roast(); System.out.println("烤制完成,出锅"); } }
烤鲈鱼子类:
package template; public class RoastLuYu extends RoastFish { @Override void addFish() { System.out.println("添加鲈鱼"); } }
烤鲟鱼子类:
package template; public class RoastXunYu extends RoastFish { @Override void addFish() { System.out.println("添加鲟鱼"); } }
测试类:
package template; public class Test { public static void main(String[] args) { RoastFish roastFish = new RoastLuYu(); roastFish.cooking(); System.out.println("-----****************------"); roastFish = new RoastXunYu(); roastFish.cooking(); } }
执行结果:
加水 添加鲈鱼 加调料 烤制 烤制完成,出锅 -----****************----- 加水 添加鲟鱼 加调料 烤制 烤制完成,出锅
原文:https://www.cnblogs.com/silenceshining/p/12670365.html