Template Method Pattern

/* * Template Method Pattern * 模式容易理解,可能在平时写程序时也会偶然用到,只是没有总结出来,模式通过一个框架,规定了一个子程序的 * 流程规则,而中间可能需要某些具体的算法时,Template Method 模式就会自行确定相应的算法,而框架设计者不关心具体 * 算法实现,分工明确。 * * 其中框架了设计成抽象类,算法框架通过一些抽象与非抽象算法组合而成,抽象接口需要具体类去实现算法。 * 另外,框架中还可以设计hook,hook用于设计出default规则,但也可以给具体实现类去实现。 * * Hollywood Principle:Dont call us ,i will call u * 原则指出高层设计不要被低层设计所调用,而应该有高层主动去调用低层设计,这样低层设计改变时,不至于对高层设计有影响 */ abstract class MyFrameDisp{ protected float [] Im; protected float [] Re; public void dispProcess(){ System.out.println("dispProcess()......"); prepareData(); otherProcess(); ////as a hook dispData(); //Display } abstract public void prepareData(); abstract public void dispData(); public void otherProcess(){ System.out.println("Other Data Process !"); } } class ComplexDisp extends MyFrameDisp{ public void prepareData(){ int len = 10; Im = new float[len]; Re = new float[len]; for(int i = 0;i<Im.length;i++) { Im[i] = i; Re[i] = i; } } public void dispData(){ for(int i = 0;i<Im.length;i++) { System.out.println(i + ":" + Re[i] + "+" + Im[i]+"i"); } } public void otherProcess(){ for(int i = 0;i<Im.length;i++) { Im[i] += 10; Re[i] += 10; } } } class RealDisp extends MyFrameDisp{ public void prepareData(){ int len = 8; Re = new float[len]; for(int i = 0;i<Re.length;i++) { Re[i] = i/(float)len; } } public void dispData(){ for(int i = 0;i<Re.length;i++) System.out.println(i + ": " + Re[i]); } } public class Test_TMP { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 System.out.println("----------complex Disp-------------------"); MyFrameDisp mfd1 = new ComplexDisp(); mfd1.dispProcess(); System.out.println("----------------Real Disp-------------------"); MyFrameDisp mfd2 = new RealDisp(); mfd2.dispProcess(); } }

 

今天情人节..呵呵,在实验室过吧.

你可能感兴趣的:(算法,框架,Class,float,IM,hook)