一句话概述TemplateMthod模式
使用子类去具体实现父类的方法,OOP的多态性的体现
TemplateMthod模式中两个主要的类和接口
AbstractClass(interface or abstarctclass)
定义了抽象方法与模板方法,在java8之后,interface可以使用default关键字,所以也可以实现模板方法
ConcreteClass(class)
具体实现抽象方法
该类就是要实现Iterator,是一个确切的迭代器,实现hasNext、next方法
其内应该有个具体的集合,就是我们需要迭代的对象
该类还应该有个index变量,获取当前的索引,用于判断是否hasNext
UML图
太简单了,就是ConcreteClass继承或实现了AbstractClass
具体案例
输出字符串或者字符
AbstractShow
public abstract class AbstractShow {
public abstract void print();
public abstract void begin();
public final void display(){
this.begin();
for(int i=0;i<5;i++){
this.print();
}
}
}
ShowChar
public class ShowChar extends AbstractShow {
char a;
public ShowChar(char c){
a = c;
}
@Override
public void print() {
System.out.print(a);
}
@Override
public void begin() {
System.out.println("输出的是字符:");
}
}
ShowString
public class ShowString extends AbstractShow{
String str;
public ShowString(String s){
str = s;
}
@Override
public void print() {
System.out.println(str);
}
@Override
public void begin() {
System.out.println("输出的是字符串:");
}
}
TMMain(Main函数)
public class TMMain {
public static void main(String[] args) {
AbstractShow as = new ShowChar('a');
as.display();
System.out.println();
as = new ShowString("cutezha");
as.display();
}
}
思考与总结
就是多态性,没什么区别