模板方法模式是一种行为型设计模式,定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。模板方法模式的优点主要包括:代码复用、灵活性等。缺点包括:过于复杂、不够灵活等。
在面向对象编程中,设计模式是一种被广泛接受的解决方案,用于解决特定问题,模板方法模式是这其中的一种,它提供了一个框架,允许子类在不改变算法结构的情况下,重新定义算法中的某些步骤,这种模式的主要优点是可以提高代码的可重用性和可扩展性。
模板方法模式的基本结构包括三个部分:抽象类(Template)、具体类(Concrete)和子类(Subclass),抽象类定义了算法的框架,包括一些抽象方法和一个或多个具体方法,具体类实现了这些抽象方法,并可以添加自己的实现,子类则可以继承抽象类,并重写其中的具体方法,以实现自己的算法。
以下是一个简单的模板方法模式的例子:
// 抽象类 public abstract class AbstractClass { // 抽象方法 public final void templateMethod() { step1(); step2(); step3(); } // 具体方法 protected abstract void step1(); protected abstract void step2(); protected abstract void step3(); } // 具体类 public class ConcreteClass extends AbstractClass { @Override protected void step1() { System.out.println("执行步骤1"); } @Override protected void step2() { System.out.println("执行步骤2"); } @Override protected void step3() { System.out.println("执行步骤3"); } } // 子类 public class Subclass extends ConcreteClass { @Override protected void step1() { System.out.println("子类执行步骤1"); } @Override protected void step2() { System.out.println("子类执行步骤2"); } }
在这个例子中,AbstractClass
是抽象类,定义了模板方法templateMethod()
,这个方法包含了算法的三个步骤:step1()
、step2()
和step3()
,这三个步骤都是抽象的,由具体的子类来实现。ConcreteClass
是具体类,实现了step1()
、step2()
、step3()
这些抽象方法。Subclass
是子类,继承了ConcreteClass
,并重写了step1()
、step2()
这些具体方法。