package top.qaqaq.java.P348;
/*
* 抽象类的应用:模板方法的设计模式
*
*
*
*/
public class TemplateTest {
public static void main(String[] args) {
Template t = new subTemplate();
t.spendTime();
}
}
abstract class Template{
//计算某段代码执行
public void spendTime() {
long start = System.currentTimeMillis();
code();//不确定的部分、易变的部分
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));
}
public abstract void code();
}
class subTemplate extends Template{
@Override
public void code() {
for(int i = 2; i <= 1000; i++) {
boolean isFlag = true;
for(int j = 2; j <= Math.sqrt(i); j++) {
if(i % j == 0) {
isFlag = false;
break;
}
}
if(isFlag) {
System.out.println(i);
}
}
}
}
package top.qaqaq.java.P348;
//抽象类的应用:模板方法的设计模式
public class TemplateMethodTest {
public static void main(String[] args) {
BankTemplateMethod btm = new DrawMoney();
btm.process();
BankTemplateMethod btm2 = new ManageMoney();
btm2.process();
}
}
abstract class BankTemplateMethod {
// 具体方法
public void takeNumber() {
System.out.println("取号排队");
}
public abstract void transact(); // 办理具体的业务 //钩子方法
public void evaluate() {
System.out.println("反馈评分");
}
// 模板方法,把基本操作组合到一起,子类一般不能重写
public final void process() {
this.takeNumber();
this.transact();// 像个钩子,具体执行时,挂哪个子类,就执行哪个子类的实现代码
this.evaluate();
}
}
class DrawMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要取款!!!");
}
}
class ManageMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要理财!我这里有2000万美元!!");
}
}