`
gengu
  • 浏览: 85100 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

模板方法模式

阅读更多

模板方法模式有这样的定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤。

 

模板方法的使用场景有:

1:多个子类有公有的方法,并且处理逻辑基本相:

 

2:重要重复的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现

 

3:重构时,模板方法模式是一个经常使用到的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。

 

package com.gengu.模板方法;

/**
 * 这是一个超类
 * */
public abstract class AbstractClass {

	/** 随意的两个方法*/
	public abstract void doSomething();
	
	public abstract void doAnything();
	
	/**  模板方法   加上一个final 防止该方法被重写*/
	public final void templateMethod(){
		this.doAnything();
		this.doAnything();
	}
}
 
package com.gengu.模板方法;

public class ConcreteClass1 extends AbstractClass {
	@Override
	public void doAnything() {
		System.out.println("类1的anything操作");
	}

	@Override
	public void doSomething() {
		System.out.println("类1的something操作");
	}

}

 

package com.gengu.模板方法;

public class ConcreteClass2 extends AbstractClass{

	@Override
	public void doAnything() {
		System.out.println("类2的anything操作");
	}

	@Override
	public void doSomething() {
		System.out.println("类2的something操作");
	}

}

 测试类

package com.gengu.模板方法;

public class Client  {

	public static void main(String[] args){
		AbstractClass concrete1 = new ConcreteClass1();
		concrete1.templateMethod();
	}
}

 可以看到,这里是把本应该归子类做的事情抽取出来放到父类中来完成了。

 

它的优点是封装不可变部分,扩展可变部分,提取公共部分代码,便于维护,有些行为由父类维护,子类实现。

 

它的缺点也很明显:子类执行的结果很明显的会影响到父类的结果,也就是子类对父类产生了影响。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics