这个模式在Android中是可以用到的,当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板模式方法的相关UML类图。
基本代码
abstract class AbstractClass{
public void Method(){
//算法中与特定的子类的关系
PrimitiveOperation();
}
public abstract void PrimitiveOpration();
}
class ConcreteClass extends AbstractClass{
@Override
public void PrimitiveOperation(){
//具体子类的详细细节处理
}
}
这个模板模式理解起来很简单,那么运用就更简单了。
举个例子,比如有一套试卷,两个学生来完成,那么只需要设计一个试卷的模板就可以了。直接上代码吧。
package com.abings.templatemethod.TemplateMethod;
import android.util.Log;
/**
* Created by Shuwen 2016/9/2.
*/
public abstract class TestPaper {
/**
*该方法是UML图中的Method()
*@author Shuwen
*created at 2016/9/2 16:42
*/
public void Test1(){
Log.i("TAG00","选择题1,毛浙东多大了?[] A.100岁 B.不知道 C.万岁");
Log.i("TAG00","答案:"+answer1());
}
public void Test2(){
Log.i("TAG00","选择题2,妈妈多大了?[] A.34岁 B.不知道 C.万岁");
Log.i("TAG00","答案:"+answer2());
}
/**
*算法中与特定的子类的关系
*@author Shuwen
*created at 2016/9/2 16:43
*/
protected abstract String answer2();
protected abstract String answer1();
}
package com.abings.templatemethod.TemplateMethod;
/**
* Created by HaomingXu on 2016/9/2.
*/
public class StuA extends TestPaper {
@Override
protected String answer2() {
return "A";
}
@Override
protected String answer1() {
return "B";
}
}
最后附上git源码:
https://github.com/SingleShu/TemplateMethodModel