(27)模块方法模式(理解抽象、继承和final)
来源:互联网 发布:java项目开发流程图 编辑:程序博客网 时间:2024/05/22 01:47
需求:获取一段程序的运行时间
原理:获取程序开始和结束的时间并相减即可
获取时间:java.lang.System类中的currentTimeMills()静态方法,返回值为long类型的当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
第一想法:将待测时间代码块放在开始时间和结束时间之间
public class getTime {public void getTime() {long start=System.currentTimeMillis();for(int i=0;i<1000;i++)//代码块 {System.out.print(i);}long end=System.currentTimeMillis();System.out.println();System.out.println("毫秒:"+(end-start));}}public class getTimeDemo { public static void main(String[] args) { // TODO Auto-generated method stub getTime gt=new getTime(); gt.getTime(); }}
这种思考方式把待测时间代码块放在开始时间和结束时间之间,如果要计算代码运行时间,就得对代码改动,而且在代码里面改更难。这时,可以通过继承,进行方法复写,具体实现如下:
public class getTime {public void getTime() {long start=System.currentTimeMillis();for(int i=0;i<1000;i++)//代码块 {System.out.print(i);}long end=System.currentTimeMillis();System.out.println();System.out.println("毫秒:"+(end-start));} }public class subgetTime extends getTime{ public void getime(){//复写long start=System.currentTimeMillis();for(int i=0;i<10000;i++)//代码块 {System.out.print(i);}long end=System.currentTimeMillis();System.out.println();System.out.println("毫秒:"+(end-start));
}
}
这样虽然能够完成,但是代码重复率太高,只是代码块发生了变化,其他都没变。既然是代码块变化,我们可以把代码块单独放置,然后让getTime()方法调用代码块方法。还需通过继承,具体如下:
public class getTime {public void getTime() {long start=System.currentTimeMillis();runCode();System.out.println("毫秒:"+(end-start));} public void runCode(){for(int i=0;i<1000;i++)//代码块 {System.out.print(i);}}
}public class subgetTime extends getTime{ public void runCode(){//复写for(int i=0;i<10000;i++)//代码块 {System.out.print(i);}
}
}public class getTimeDemo { public static void main(String[] args) { // TODO Auto-generated method stub subetTime gt=new subgetTime(); gt.getTime(); }}
其实父类中的runCode()方法内的方法体,写着也多余,因为代码的不确定性
public class getTime {public void getTime() {long start=System.currentTimeMillis();runCode();System.out.println("毫秒:"+(end-start));} public void runCode(){ } } public class subgetTime extends getTime{ public void runCode(){//复写 for(int i=0;i<10000;i++)//代码块 {System.out.print(i);} } }public class getTimeDemo { public static void main(String[] args) { // TODO Auto-generated method stub subetTime gt=new subgetTime(); gt.getTime(); }}
这个时候,runCode()方法,在getTime类中显得多余了。这时想到抽象方法,抽象类。
public abstract class getTime {public void getTime() {long start=System.currentTimeMillis();runCode();System.out.println("毫秒:"+(end-start));} public abstract void runCode(); } public class subgetTime extends getTime{ public void runCode(){//通过继承,对抽象类中的抽象方法复写 for(int i=0;i<10000;i++)//代码块 {System.out.print(i);} } }public class getTimeDemo { public static void main(String[] args) { // TODO Auto-generated method stub subetTime gt=new subgetTime(); gt.getTime(); }}
这样,就优化了代码。重=从上面的代码可以看出,getTime()方法,就是获取代码运行时间的代码,不应该再改变(不能设为私有,私有只在类内可以使用,类外继承不可见),所以将这个方法改为final,不允许继承修改此代码
public abstract class getTime {public final void getTime() {long start=System.currentTimeMillis();runCode();System.out.println("毫秒:"+(end-start));} public abstract void runCode(); } public class subgetTime extends getTime{ public void runCode(){//通过继承,对抽象类中的抽象方法复写 for(int i=0;i<10000;i++)//代码块 {System.out.print(i);} } }public class getTimeDemo { public static void main(String[] args) { // TODO Auto-generated method stub subetTime gt=new subgetTime(); gt.getTime(); }}
当代码优化后,就可以解决这类问题。
这种方式,模板方法设计模式。
什么事模板式方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分。
那么这时就将不确定的部分暴露出来,由该类的子类去完成。但不一定用抽象,有些含默认的实现。
阅读全文
0 0
- (27)模块方法模式(理解抽象、继承和final)
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- 第十三讲 继承、方法重写与super、final关键字、抽象类与接口、Object类、工厂和静态代理模式
- final 实例域+final类+final方法(阻止继承)
- 黑马程序员——面向对象07(继承、final、抽象类、模版方法、接口)
- 7.1面向对象(继承中成员方法关系,final关键字,多态,抽象类,接口)
- 别样JAVA学习(五)继承上(0.1)抽象类和模板方法模式
- Java基础之面向对象(三)--继承、抽象类、接口、final修饰符、模版方法模式
- Java基础之面向对象(三)--继承、抽象类、接口、final修饰符、模版方法模式
- 黑马程序员4. 继承&覆盖&final&抽象&模板方法模式&接口
- 黑马程序员--JAVA基础_03(继承、final修饰符、抽象、模版方法设计模式)
- 终止继承:Final类和Final方法
- 终止继承:Final类和Final方法
- 2.6Java继承(抽象类,接口,final)
- 继承 、final、抽象
- 黑马程序员——java第七天:面向对象(继承、子父类之变量、final、抽象、模板方法、接口)
- JAVA 学习模块十二: Final 关键字 以及 继承(下)
- day07继承,子父类中成员的特点,方法的覆盖,子父类中的构造函数,final,抽象类,模板方法模式。 接口
- HTML+CSS进阶学习摘录(Display属性)(三)
- 感知机
- python虚拟环境
- java中的组合关系
- 【Dubbo分布式服务框架】5.传统测试工程的搭建1
- (27)模块方法模式(理解抽象、继承和final)
- 安卓开发点击CheckBox显示明文密码
- 洛谷 P3478 [POI2008]STA-Station(bzoj P1131 [POI2008]STA-Station)
- 杂项
- 计算机位运算
- java并发编程实战-基础构建模块3
- C 语言返璞归真: 指针篇番外
- EJB到底是什么?
- 用户注册