以“见人说人话见鬼说鬼话”来理解模板方法模式:
package design.templateMethod2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-4 下午08:21:37 <br> * */ public class Test { public static void main(String[] args) { /* * 模板方法模式(Template Method) * 俗话说,见人说人话见鬼说鬼话,其实就是模版方法模式的最好理解。 * 模版方法模式其实就是在抽象类或接口中定义一个骨架,然后不同的子类有自己的实现。 * 模版方法模式和方法工厂模式有相似之处,方法工厂模式在抽象部分定义好创建产品的骨架,然后不同的 * 子类有各自的实现,那么可以这么看: * 方法工厂模式是对创建产品的抽象; * 模版方法模式是对具体实现的抽象; * AbstractList.get()、ThreadPoolExecutor.Worker是模版方法模式在JDK中的体现。 * * don't call us, we'll call u(不要来找我,我会去找你的)说的就是模版方法模式, * 也体现了反向控制的思想,像IOC控制反转也是这种思想的体现。 */ Template say = new SayPersonTalk(); say.say(); say = new SayGhostTalk(); say.say(); } }
package design.templateMethod2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-4 下午08:22:00 <br> * 说话模版 */ public abstract class Template { public abstract void say(); }
package design.templateMethod2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-4 下午08:23:15 <br> * 说人话 */ public class SayPersonTalk extends Template { @Override public void say() { System.out.println("说人话。。。"); } }
package design.templateMethod2; /** * @author 作者 E-mail: [email protected] * @version 创建时间:2012-2-4 下午08:24:04 <br> * 说鬼话 */ public class SayGhostTalk extends Template { @Override public void say() { System.out.println("说鬼话。。。"); } }