简单学习模板方法模式

  昨天下午闲暇无事翻了一下《java与模式》,偶然看到模板方法模式这一章,猛然间明白自己以前常用这模式,居然不知道。现把模板方法模式学习记录一下。
模板方法模式示意性代码如下.
下面定义的是抽象模板类:
public abstract class AbstractFatherClass {

	/**
	 * 模板方法的声明与实现
	 */
	public void templateMethod() {
		// 调用基本方法
		this.doOperation1();

		// 调用基本方法
		this.doOperation2();

		this.doOperation3();
	}

	/**
	 * 基本方法的声明 (此方法让此抽象类的子类实现)
	 */
	protected abstract void doOperation1();

	/**
	 * 基本方法的声明 (此方法让此抽象类的子类实现)
	 */
	protected abstract void doOperation2();

	private final void doOperation3() {
		// dosometing
	}
}



我们可以看到上面的代码中 doOperation1()和doOperation2()这两个基本方法在抽象模板类并没有实现,而是交给子类(具体模板类)去实现。

接下来定义具体模板类,具体模板角色主要实现抽象模板角色声明的抽象方法
public class ConcreteClass extends AbstractFatherClass {

	/**
	 * 实现抽象父类声明的抽象方法
	 */
	@Override
	protected void doOperation1() {

		System.out.println("doOperation1 method");

	}

	/**
	 * 实现抽象父类声明的抽象方法
	 */
	@Override
	protected void doOperation2() {

		System.out.println("doOperation2 method");

	}

}


上面的具体模板类实现了父类声明的基本方法doOperation1(),doOperation2()。
模板方法模式可以用一句很简单的话来表达:在父类的一个方法中定义一个算法的骨架,把具体的留给子类去做。
至于应该在什么阶段把处理分开来,哪些处理交给父类,哪些处理交给子类,这个要看实际情况然后去运用。
可以说模板方法模式是面向对象三大特性:继承,封装,多态 最简单的体现。

猜你喜欢

转载自xiangdefei.iteye.com/blog/1079710