模板方法

定义

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。


类图


把共用的方法放在抽象类中,用于复用。

把不确定的方法,放入到具体类中,以便让具体类可以很好的构造自己的方法。

方法都会被装入到一个TemplateMethod方法中。


对应的方法,具体的什么时间用得到,什么时间用不到,根据条件来判断。


相关代码

AbstractClass抽象类,定义抽象行为

public abstract class AbstractClass {
	
	public static final String METHOD_1 = "m1";
	public static final String METHOD_2 = "m2";
	
	public final void templateMethod(String methodName){
		if (METHOD_1.equals(methodName)){
			doOperation1(methodName);
		}
		if (METHOD_2.equals(methodName)){
			doOperation2(methodName);
		}
	}
	
	protected abstract void doOperation1(String methodName);
	
	protected abstract void doOperation2(String methodName);
}

ConcreteClass具体类,实现父类定义的一个或多个抽象方法

public class ConcreteClass extends AbstractClass {
	
	@Override
	protected void doOperation1(String methodName) {
		System.out.println("method1");

	}

	@Override
	protected void doOperation2(String methodName) {
		System.out.println("method2");

	}

}

客户端调用

public class test {

	public static void main(String[] args) {
		AbstractClass a = new ConcreteClass();
//		a.templateMethod(AbstractClass.METHOD_1);
		a.templateMethod(AbstractClass.METHOD_2);

	}
}

模板方法是通过把不变的行为搬到父类,去除子类中的重复代码,提供很好的代码复用平台。


对比

和工厂方法

都是让具体的实现放在子类中。

工厂方法主要是生产出产品,然后去应用产品。

模板方法是在于依赖子类中的步骤中的其中几个步骤,具体的步骤已经在基类中写好了。

 

和策略模式

都是封装算法。

策略都是单独的一个类。可以随时去更改策略。

模板方法模式主要在于封装步骤,具体的实现是根据依靠各个子类。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值