抽象应用之模板方法的设计模式

抽象类体现的就是一种模板模式的设计模式,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造。 但子类通常会保留抽象类的行为方式。

解决的问题

  • 1、当功能的内部的一部分是确定的,另一部分是不确定的,这是就可以把不确定的功能暴露出去让子类去实现。 如这个例子中的让子类去具体实现code方法。在拿子类去调用父类的spendingTime方法。
  • 2、编写一个抽象父类,父类提供了多个子类的方法,让其子类去具体实现。这就是抽象类的模块设计模式
  1. 创建一个抽象类 ,让其具有一个抽象方法,而且提供一个公共方法,计算出此方法的运行时间;
//创建一个抽象类
abstract class Template {

  //创建一个code的抽象方法,运行在子类上进行扩展
  abstract void code();

  //计算出运行code方法所用的时间
  public void  spendingTime() {

      long start = System.currentTimeMillis();
      //调用code方法。
      code();
      long end = System.currentTimeMillis();
      System.out.println("花费的时间为:"+(end - start));
  }
}
  1. 创建一个抽象类的子类 让其重写父类抽象方法,再在这个方法基础上进行扩展;
class SubSpending extends Template{
   //eg:求100000以内的素数。
   @Override
   void code() {
       boolean flag = false;
       for (int i = 2; i <= 100000; i++) {
           for (int j = 2 ; j <= Math.sqrt(i) ; j++){
               //对j取余,如果能整除,输出这个数
               if(i % j == 0) {
                   flag = true;
                   break;
               }
           }
           //如果flag的值变了,就输出相应的i
           if(!flag) {
               System.out.println(i);
           }
           //当输出完就把flag的值改过来。
           flag = false;
       }
   }
}
  1. 测试 ,创建一个子类的匿名类,进行父类的方法调用;
public static void main(String[] args) {
           //创建一个匿名类,调用抽象父类的方法。
           new SubSpending().spendingTime();
       }

愿我提供的方法及思路对你的大牛之路提供了力量。加油,共勉之。

猜你喜欢

转载自blog.csdn.net/weixin_40961551/article/details/88593073