模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
定义有些呆板,说说我的理解吧。父类定义实施的步骤,子类中实现具体的算法。当我们要完成在某一细节层次一直得一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,通常考虑用模板方法木事来处理。
代码很简单的不要不要的,还有注释。直接贴啦。
(1)定义抽象模板父类
/** * 抽象模板,定义并实现了一个模板方法。这个模板方法一般是个<b><u><font color="blue">具体方法</font></u></b>。<br/> * 它给出了一个顶级逻辑的骨架。<br/> * 而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。<br/> * 顶级逻辑也有可能调用一些具体方法。 * @author 董永康 * */ public abstract class AbstractClass { public abstract void add(); public abstract void sub(); public void TemplateMethod() { add(); sub(); System.out.println(this.getClass().getName()); } }
(2)具体实现子类
/** * 具体实现类,在这里实现父类定义的一个或者多个抽象方法 * @author 董永康 * */ public class ConcreteClassA extends AbstractClass { @Override public void add() { System.out.println("ConcreteClassA-->add()"); } @Override public void sub() { System.out.println("ConcreteClassA-->sub()"); } }
/** * 具体实现类,在这里实现父类定义的一个或者多个抽象方法 * * @author 董永康 * */ public class ConcreteClassB extends AbstractClass { @Override public void add() { System.out.println("ConcreteClassB-->add()"); } @Override public void sub() { System.out.println("ConcreteClassB-->sub()"); } }
(3)测试类
public class Template { public static void main(String[] args) { AbstractClass mAbstractClass = new ConcreteClassA(); mAbstractClass.TemplateMethod(); mAbstractClass = new ConcreteClassB(); mAbstractClass.TemplateMethod(); } }
(4)输出
ConcreteClassA-->add() ConcreteClassA-->sub() com.dyk.template.ConcreteClassA ConcreteClassB-->add() ConcreteClassB-->sub() com.dyk.template.ConcreteClassB
总结:模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势。提供了一个很好的代码复用平台。通过模板方法模式把不可变的行为搬移到父类,帮助子类拜托重复不变行为的纠缠。
下载地址:http://download.csdn.net/detail/qq_17250009/9229893
时间: 2024-10-31 19:05:50