失踪人口回归,毕竟在更新了一段时间,决定回再试试呜呜呜。
那么回归主题——今天主要学习了模板方法的设计模式,也算是一种简单的设计模式,也不需要单例模式那样有两个固定的模板。毕竟是抽象类的运用,抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上回保留抽象类的行为方式。
解决的问题:
- 当功能内部一部分实现是确定的,另一部分实现不确定。这时可以把不确定的部分暴露出去,让子类实现。
- 换句话说,在软件开发中实现一个算法时,整体步骤很固定,通用,这些步骤在父类中提前写好了。但是某些易变的,不确定的可以抽象出来,供不同子类实现,这就是这种模板模式。
举个例子
我需要一个计算代码实现的时间的函数来计算不同的代码实现时间
那么我可以使用一个抽象类Template(模板)来设计一个模板。在这个模板中添加这个计算时间的方法
public void spendTime(){
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
System.out.println("花费的时间为"+(end - start)+"ms");
}
这段代码中code();就是应该在子类中实现的抽象方法。
我们再使用Print来继承Template这个抽象类,在这个子类中重写code方法(别忘了在抽象类中定义抽象方法code哦),就使用一个经典的计算2-100000以内的质数函数吧(这个函数下次讲嘻嘻)那么代码呈现出来是这样的:
class Print extends Template{
@Override
public void code(){
System.out.println("2-100000所有的质数为:");
//判断2-100000的质数
for (int i = 2; i < 100000; 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);
}
}
}
}
此时我们的code函数就已经被子类重写成为计算2-100000以内质数的函数了,然后再在我们的main函数中去new一个对象p,用p去调用spendTime这个方法,这样我们的执行结果就是2-100000以内的质数啦。
那模板方法的设计模式大概就是这种感觉,就像是你提前设计好要进行的事项,然后之后在事项里填充具体的内容一样。芜湖,休息时间到!再见!