在程序开发中你可能经常遇到这种情况,某个要实现的算法分为多个步骤,有些步骤是固定不变的,有些步骤是不固定的,为了提高代码的可扩展性和可维护性,模板设计模式在这种场景下就派上用场了。
在模板设计模式中,一个算法可以分为多个步骤,每个步骤对应一个方法称为基本方法,步骤的执行顺序是在一个模板方法中定义好的,有些基本方法是固定不变的,有些基本方法是不固定的。在模板设计模式中,模板方法和固定不变的基本方法会在父类中实现,而不固定的基本方法在父类中是抽象方法,其实现被延迟到子类中完成。
如上图所示,在抽象类AbstractClass中Operation_4()方法是固定的基本方法,其实现在父类中。而Operation_2、Operation_3()、Operation_5()是不固定的基本方法,所以在父类中是抽象方法,需要子类去实现。
/*********************************************************************** * Module: AbstractClass.java * Author: Administrator * Purpose: Defines the Class AbstractClass ***********************************************************************/import java.util.*;public abstract class AbstractClass { public void template() { // TODO: implement } public abstract void operation(); public abstract void operation3(); public void operation4() { // TODO: implement } public abstract void operation5();}
/*********************************************************************** * Module: ConcreteClass1.java * Author: Administrator * Purpose: Defines the Class ConcreteClass1 ***********************************************************************/import java.util.*;public class ConcreteClass1 extends AbstractClass { public void operation() { // TODO: implement } public void operation3() { // TODO: implement } public void operation5() { // TODO: implement }}
/*********************************************************************** * Module: ConcerteClass2.java * Author: Administrator * Purpose: Defines the Class ConcerteClass2 ***********************************************************************/import java.util.*;public class ConcerteClass2 extends AbstractClass { public void operation() { // TODO: implement } public void operation3() { // TODO: implement } public void operation5() { // TODO: implement }}