模板方法模式



在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
    抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
    具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。


eg: 计算某段程序的运行时间:

class GetTime
{
	public final void getTime()
	{
		long start=System.currentTimeMilis();
		runcode();
		long end=System.currentTimeMilis();
		System.out.println("运行时间:"+(end-start))
	}
	public abstract void runcode();
}
class SubTime extends GetTime
{
	public void runcode()
	{
	 .............
	 .............
	}
}
class Test
{
	public static void main(String[] args)
	{
		SubTime st=new SubTime();
		st.getTime();
	}
}

该题中计算运行时间是固定的功能,而要运行的代码是不确定的。所以可以将要运行的代码封装成抽象方法,由子类去根据自己的需求来完成,而不希望被子类复写改变的getTime()方法可以用final关键字修饰一下。在该例子中,GetTime类是一个模板,用来完成不同的需求。


优点:
模板方法模式通过把不变的行为搬移到父类,去除了子类中的重复代码。
子类实现算法的某些细节,有助于算法的扩展。
通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。


适用场景:
在某些类的算法中,用了相同的方法,造成代码的重复。
控制子类扩展,子类必须遵守算法规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值