您的位置:首页 > 编程语言 > Java开发

Java设计模式之--模板方法模式(Template Method)

2016-06-21 16:17 776 查看
概念:模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。模板方法模式,技术具体是:一个抽象类中,对外主方法另外有n个方法,这些方法,可以是抽象的,也可以是实际的方法,定义子类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系图:抽象类AbstractCalculator 有一个Final修饰的对外主方法,另有一个待子类实现的抽象方法
public abstract class AbstractCalculator {
public final int calculate(String exp, String opt) {
int array[] = split(exp, opt);
return calculate(array);
}

public int[] split(String exp, String opt) {
String array[] = exp.split(opt);
int arrayInt[] = new int[array.length];
for (int i = 0; i < array.length; i++) {
int iTemp = 0;
try {
iTemp = Integer.parseInt(array[i]);
} catch (Exception e) {
e.printStackTrace();
}
arrayInt[i] = iTemp;
}
return arrayInt;
}

public abstract int calculate(int... num);

}
子类实现抽象方法:
public class Plus extends AbstractCalculator {
@Override
public int calculate(int... num) {
int iRes = 0;
for (int i = 0; i < num.length; i++) {
iRes += num[i];
}
return [/b]iRes;
}
}
public class Minus extends AbstractCalculator {
@Override
public int calculate(int... num) {
int iRes = 0;
for (int i = 0; i < num.length; i++) {
if (i == 0) {
iRes += num[i];
} else {
iRes -= num[i];
}
}
return iRes;
}
}
测试类:
public class WorkClass {
public void test() {
StringBuilder exp = new StringBuilder("1+2+3+4");
AbstractCalculator calculator = new Plus();
System.out.println(String.format("%s=%s",exp,calculator.calculate(exp.toString(),"\\+")));
exp.delete(0,exp.length()).append("1-2-3-4");
calculator= new Minus();
System.out.println(String.format("%s=%s",exp,calculator.calculate(exp.toString(),"\\-")));
}
}
测试结果:
06-21 16:54:05.348 8253-8253/com.example.qinghua_liu.myapplication I/System.out: 1+2+3+4=1006-21 16:54:05.350 8253-8253/com.example.qinghua_liu.myapplication I/System.out: 1-2-3-4=-8
结语:客户成功通过对AbstractCalculator的调用实现对子类具体实现方法的调用。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息