package com.vatana.template; /** * 模板方法模式,把具体操作交给子类 * 实例:给字符串附加不同的前后缀 * @author Vatana */ public abstract class TemplateMethod { String str; public TemplateMethod(String str){ this.str = str; } public void excute(){ init(); print(); destroyed(); } abstract protected void init() ; protected void print() { System.out.println(str); }; abstract protected void destroyed() ; } package com.vatana.template; /** * * @author Vatana */ public class Action1 extends TemplateMethod{ public Action1(String str) { super(str); } @Override protected void init() { System.out.println("++++++begin++++++"); } @Override protected void destroyed() { System.out.println("+++++end+++++++"); } } package com.vatana.template; /** * * @author Vatana */ public class Action2 extends TemplateMethod{ @Override protected void init() { System.out.println("*****************"); } public Action2(String str) { super(str); } @Override protected void destroyed() { System.out.println("*****************"); } } package com.vatana.template; /** * * @author Vatana */ public class Test { public static void main(String[] a){ String str = "Hello world!"; TemplateMethod tm = new Action1(str); tm.excute(); tm = new Action2(str); tm.excute(); } } 这个实现很简单,但是实用性就大的多了。还是那句话,如果需要实现新的方法不需要修改子类,只需新增加一个子类,实例化这个子类即可,上面的测试例子中只需修改Action1为Action2,其它地方完全不需要修改稿,而且还能与旧代码兼容。