在程序开发中你可能经常遇到这种情况,某个要实现的算法分为多个步骤,有些步骤是固定不变的,有些步骤是不固定的,为了提高代码的可扩展性和可维护性,模板设计模式在这种场景下就派上用场了。

    在模板设计模式中,一个算法可以分为多个步骤,每个步骤对应一个方法称为基本方法,步骤的执行顺序是在一个模板方法中定义好的,有些基本方法是固定不变的,有些基本方法是不固定的。在模板设计模式中,模板方法和固定不变的基本方法会在父类中实现,而不固定的基本方法在父类中是抽象方法,其实现被延迟到子类中完成。

模板设计模式-LMLPHP

如上图所示,在抽象类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
   }

}
12-07 14:29