父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式
优点:
可以保持逻辑处理通用化(父类中定义处理流程)
父类与子类之间协作(子类实现父类的抽象方法)
父类与子类保持一致性(子类继承父类)
延伸:
子类可以使用父类的方法
可以通过子类增加方法以实现新功能
子类重写父类的方法可以改变程序的行为
角色划分:
AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现。
ConcreteClass具体类:实现具体的抽象方法。
public abstract class AbstractDisplay { public abstract void open(); public abstract void print(); public abstract void close(); public final void display() { open(); for(int i=0;i<5;i++) { print(); } close(); } }
public class CharDisplay extends AbstractDisplay { @Override public void open() { System.out.println("CharDisplay open"); } @Override public void print() { System.out.println("CharDisplay print"); } @Override public void close() { System.out.println("CharDisplay close"); } }
public class StringDisplay extends AbstractDisplay { private String string; private int width; public StringDisplay(String string,int width) { this.string=string; this.width=width; } @Override public void open() { printLine(); } @Override public void print() { System.out.println("|" +string+"|"); } @Override public void close() { printLine(); } private void printLine() { System.out.print("+"); for(int i=0;i<width;i++) { System.out.print("-"); } System.out.println("+"); } }
public class Main { public static void main(String[] args) { AbstractDisplay charDisplay = new CharDisplay(); charDisplay.display(); AbstractDisplay stringDisplay = new StringDisplay("testname",5); stringDisplay.display(); } }
结果:
CharDisplay open
CharDisplay print
CharDisplay print
CharDisplay print
CharDisplay print
CharDisplay print
CharDisplay close
+-----+
|testname|
|testname|
|testname|
|testname|
|testname|
+-----+
原文地址:https://www.cnblogs.com/use-D/p/9557722.html
时间: 2024-11-05 16:08:37