面向对象之一抽象类 抽象模板设计 (Servlet)就用到了模板设计

    
抽象类关键字  abstract 
抽象类不和那些关键字类共存  private  static  final  
抽象类 被子类继承 如果子类不是抽象类  那么强制子类必须覆写父类的方法

抽象类 不能被final 所修饰  因为被final所修饰的类 无法继承的

抽象类 之模板设计 (Template Method)

题目

/* 需求: 计算1000个整数和1000个字符串相连接的耗时时间. */

所有的子类都具有一个共同的操作 为了代码复用 我把共有的代码写成一个方法 提取到父类去 让其他的子类所继承于该父类 
但是 该共同操作方法中 有一部分功能是父类不知所措如何写的  那么就必须定义一个抽象方法  让子类自己去实现自己想做的事情  而只在这个父类共性方法当中调用这个抽象方法即可--------->引出了一个模板设计

模板方法模式(TemplateMethod):在父类的一个方法中定义一个总体框架的骨架(模板方法),而将某一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

-------------------------------------------------------------------------------------------------------------

抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。

模板方法  一种通用的处理方法 由模板去完成

抽象方法 一种业务功能的实现 由子类去实现

原始代码

class StringDemo{
    public void doWork(){
    //开始时间
    long start=System.currentTimeMillis();
    String str="";
    for (int i = 0; i < 10000; i++) {
str+=i;
}
    //结束时间
    long end=System.currentTimeMillis();
        System.out.println("总耗时间"+(end-start));
        System.out.println(str);
    }

}
class IntDemo{
public void doWork(){
//开始时间
long start=System.currentTimeMillis();
int j=0;
for (int i = 0; i < 10000; i++) {
j+=i;
}
//结束时间
long end=System.currentTimeMillis();
System.out.println("总耗时"+(end-start));
   System.out.println(j);
}

}


public class MyDemo7 {
public static void main(String[] args) {
/* 需求: 计算1000个整数和1000个字符串相连接的耗时时间. */
System.out.println("int 耗时");
new IntDemo().doWork();
System.out.println("String 耗时");
new StringDemo().doWork();
}
}

模板代码如下 

abstract   class  MyDemo6{
//被final修饰方法是不能被覆写的 
public final long getSuanfa(){
//开始时间记录一下 因为这个2个子类都需要这个所以提供一个最终的方法 整体框架
long start =System.currentTimeMillis();
//这里每个子类做不同的事情 那么我就交给子类去实现
//而这个方法的具体实现交给子类去做
doWork();
//结束时间记录一下
long end=System.currentTimeMillis();
return end-start;//返回所用的时间
}
//强制子类重写我这个方法   而我不需要知道子类这个方法里面做了哪些操作
public abstract void doWork();
 }


//那么我把它们2个类共同的代码提起出来
class IntOperate extends MyDemo6 {
//这个子类继承了父类 那么必须重写父类的抽象方法
public void doWork() {

long j = 0;
for (int i = 0; i < 10000; i++) {
            j+=i;
}
System.out.println(j);
}
}


class StringOperate extends MyDemo6{ 
//子类继承于父类 那么就强制重写父类抽象方法
public void doWork() {

String str="";
for (int i = 1; i < 10000; i++) {
str+=i;
}
System.out.println(str+"sss");
}
}


 

public class OperateDemo {
/* 需求: 计算1000个整数和1000个字符串相连接的耗时时间. */
     public static void main(String[] args) {
    //而我调用子类所继承父类 最终方法 就行了
System.out.println(new StringOperate().getSuanfa());
System.out.println(new IntOperate().getSuanfa()); 
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟子涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值