模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式Demo:
/** * 2018年3月28日下午7:53:45 */ package com.Designpattern; /** * @author xinwenfeng * */ public class TestTemplateMethod { /** * @param args */ public static void main(String[] args) { MyCookTemplate template; template = new TomatoSoup(); template.cook(); System.out.println("=============================="); template = new DoFish(); template.cook(); } } abstract class MyCookTemplate{ public void cook(){ prepareFood(); makeFire(); doCook(); stopFire(); finishCook(); } public abstract void prepareFood(); private void makeFire() { System.out.println("-生火"); } public abstract void doCook(); public abstract void finishCook(); private void stopFire() { System.out.println("-停止生火"); } } class TomatoSoup extends MyCookTemplate{ @Override public void prepareFood() { System.out.println("洗好西红柿,搅好蛋黄汤,准备好佐料。"); } @Override public void doCook() { System.out.println("熬西红柿汤,撒上蛋黄汤搅拌,加上佐料。"); } @Override public void finishCook() { System.out.println("用大碗盛出来。"); } } class DoFish extends MyCookTemplate{ @Override public void prepareFood() { System.out.println("洗鱼,除鳞,去内脏,准备佐料。"); } @Override public void doCook() { System.out.println("放入鱼,放入佐料,慢火熬制。"); } @Override public void finishCook() { System.out.println("用长碟子盛出来。"); } }
结果: