【Java】模板方法设计模式详解

一. 需求:统计不同操作的耗时时间模板操作

首先看这样一段代码:

class StringOperate
{
	public  Long stringOperate(){
		Long currentTime = System.currentTimeMillis(); //当前系统的时间(毫秒)
		String str = "";
		for (int i=0 ; i<10000;i++ )
		{
			str +=i; 
		}
		Long endTime = System.currentTimeMillis();
		return endTime - currentTime;
	}
}

class IntOperate
{
	public  Long intOperate(){
	
		Long currentTime = System.currentTimeMillis(); //当前系统的时间(毫秒)
		int num = 0;
		for (int i=0 ; i<10000000;i++ )
		{
			num += i; 
		}
		Long endTime = System.currentTimeMillis();
		return endTime - currentTime;
	}
}

class TemplateMethodDemo 
{
	public static void main(String[] args) 
	{
		//统计String的10000次操作和int操作相加10000000次的时间差
		System.out.println(new StringOperate().stringOperate());
		System.out.println(new IntOperate().intOperate());
	}
}

二.改进思路

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三. 使用模板方法设计模式改进代码

// 抽象的模板类
abstract class TemplateMethod
{
	//模板方法:总体算法的骨架,总体不能修改
	final public Long typeOperate(){
		Long currentTime = System.currentTimeMillis(); //当前系统的时间(毫秒)
		// 具体操作留给子类完成
		this.doWork(); 
		Long endTime = System.currentTimeMillis();
		return endTime - currentTime;	
	}

	protected abstract void doWork();
}

class StringOperate extends TemplateMethod
{

	public void doWork(){
		String str = "";
		for (int i=0 ; i<10000;i++ )
		{
			str += i; 
		}
	}
}

class IntOperate extends TemplateMethod
{
	public  void doWork(){
		int num = 0;
		for (int i=0 ; i<10000000;i++ )
		{
			num += i; 
		}
	}
}

class TemplateMethodDemo 
{
	public static void main(String[] args) 
	{
		//统计String的10000次操作和int操作相加10000000次的时间差
		System.out.println(new StringOperate().typeOperate());
		System.out.println(new IntOperate().typeOperate());
	}
}

四.模板方法设计模式

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

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

在JavaWeb中:HttpServlet类中,也遵循这一命名规则,如doGet(),doPost()等方法。

抽象父类至少提供的方法:

  • 模板方法:一种通用的处理方式,即模板(总体算法的骨架);
  • 抽象方法:一种具体的业务功能实现,由子类完成;

注意:

抽象父类提供的模版方法只是定义了一个通用算法,其实现必须依赖子类的辅助。

模版方法作为模版样式不准子类覆写:

答:用final修饰,不让子类覆盖

抽象方法的权限又如何设置:

答:使用protected修饰

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值