模板方法设计模式

/** 模板方法设计模式:父类的普通方法依赖于一个抽象方法,而抽象方法则推迟到子类中提供实现

*   父类中的普通方法只提供通用的算法,把抽象方法暴露出去,让子类去实现

*/
public class TestTemplate {
public static void main(String[] args) {
//匿名类对象调用其父类方法
new SubTemplate().spendTime();
}
}

abstract class Template {
//把抽象的部分暴露出来,让子类去实现
public abstract void code();
//空参构造器
public Template(){

}
//普通方法依赖于抽象方法(也就是和抽象方法发生关系。。。)
//计算code方法的运行时间
public void spendTime() {
//system类的currentTimeMillis方法
long start = System.currentTimeMillis();
//这个方法不是抽象的,所以可以用对象来调用。同时这是个虚拟方法调用,即调用的是子类重写的方法。
this.code();

long end = System.currentTimeMillis();
System.out.println("花费的时间是 : " + (end - start));
}
}
class SubTemplate extends Template{
public SubTemplate(){
super();
}
public void code(){
//输出100000以内的素数
//首先假定这个数是素数
boolean flag = true;
//将这个数i作为被除数
for(int i = 2; i <= 100000;i++){
//j作为除数
for(int j = 2; j <= Math.sqrt(i); j++){
//若被除数能被除数除尽,则这个数有除了1 和 自身 以外的其他因数,所以不是素数,退出循环
if( i % j == 0){
flag = false ;
break;
}
}
//判断这个数是不是素数,是的话就输出
if(flag == true ){
System.out.println(i);
}
//重新假定这个数是素数
flag = true;
}
}
}

posted @ 2017-06-07 14:55  多罗瑞琪  阅读(156)  评论(0编辑  收藏  举报