00012.02设计模式(模板设计模式的了解)

一、入门:什么叫设计模式

1、什么叫设计模式?
前辈们在写了很多代码以后得出来的一种代码的结构,总结出了一些模式,而且确保这样的写法比另外一种写法更优
简单来说就是:解决问题的套路、代码结构
在Java中,常用的设计模式有23种
javaSE阶段只学习
(1)模板设计模式
(2)单例设计模式(☆☆☆☆☆一定要会徒手写出来,理由:代码非常简单,但是又是每个公司的必考题)
(3)工厂设计模式(☆☆一定要会用工厂类的方法)
(4)代理设计模式(☆☆☆要求一定会模仿写出来)
(5)迭代器设计模式
(6)装饰者设计模式
能看懂

(1)模板设计模式

比如我们经常用的PPT模板、论文模板、简历模板、请假条模板
他们有什么特点呢?
特点就是架子都给你搭好了,你去改一下里面的内容就行了
裆部解决问题的时候,总体的算法的结构/步骤是确定的,但是其中的一步或者几步是不确定的,得使用者自己来确定

在这里插入图片描述举例:
例如我们编写一个类,这个类里面包含一个方法,要求可以统计你执行任何一段代码的运行时间
思路:我们想不考虑代码怎么实现,但是经过分析我们可以知道步骤肯定是有这么几个
(1)获取开始的系统时间
(2)执行XXX(要执行的代码)
(3)获取结束时的系统时间
(4)计算时间差
从中我们可以得出,实际上我们并不知道具体执行的是什么代码,但是这个模板是没有错的,具体执行什么代码往里面填就好了
代码实现:
不会的要习惯性的去查API
比如获取开始时间
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
解决办法:刚刚讲过的abstract,使用抽象方法抽象类,要求使用者继承后必须重写
在这里插入图片描述
在这里插入图片描述
然后·再去main方法里面去调用子类的方法即可

在这里插入图片描述

(2)优化

比如有个需求,需求(1)父类里面的代码不允许被子类修改
解决办法:加上final
在这里插入图片描述
需求(2)父类里面的执行部分 doWork()不能被父类单独调用,只能由子类重写,调用子类的doWork()
解决办法:改修饰符为protected
在这里插入图片描述

(3)总结

至此整套流程完成。
还是那句话,学习编程就像学习游泳学习开车,想想你考驾照的时候是怎么考到的,车是怎么学会的,光靠理论是远远不够的,还是多练习,多写,多做,多练
完整代码:

package com.atguigu.test02.abstract_;

public class TestTemplate {
	 public static void main(String[] args) {
		 CalTime calTime=new MyCalTime();//多态引用
		 //calTime.getTime();
		 long time0= calTime.getTime();
		 System.out.println("耗时:"+time0+"毫秒");
		 System.out.println("-------------");
		 MyCalTime myCalTime=new MyCalTime();//正常使用
		 long time=myCalTime.getTime();
		 System.out.println("耗时:"+time+"毫秒");
	}
}
//模板类
abstract class CalTime{
	//可以计算任意一段代码的运行时间
	//这里加fina的目的是不希望子类被重写,不希望别人改写我的算法结构
	public final long getTime(){
		//(1)、获取开始时的系统时间
		long start=System.currentTimeMillis();
		
		//(2)执行xxx
		doWork();
		
		//(3)获取结束时系统时间
		long end = System.currentTimeMillis();
		
		//(4)计算时间差
		return end-start;
	}
	protected abstract void doWork();
}
class MyCalTime extends CalTime{

	@Override
	protected void doWork() {
		// TODO Auto-generated method stub
		long sum =0;
		for(int i=1;i<=300000;i++){
			sum+=1;
		}
		System.out.println("sum="+sum);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值