在程序开发中你可能经常遇到这种情况,某个要实现的算法分为多个步骤,有些步骤是固定不变的,有些步骤是不固定的,为了提高代码的可扩展性和可维护性,模板设计模式在这种场景下就派上用场了。
在模板设计模式中,一个算法可以分为多个步骤,每个步骤对应一个方法称为基本方法,步骤的执行顺序是在一个模板方法中定义好的,有些基本方法是固定不变的,有些基本方法是不固定的。在模板设计模式中,模板方法和固定不变的基本方法会在父类中实现,而不固定的基本方法在父类中是抽象方法,其实现被延迟到子类中完成。
如上图所示,在抽象类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
}
}