模板方法模式(TemplateMethodPattern)

基本介绍:

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


1. 模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。


2. 在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。


示例代码:

package org.brando;

/**
 * 
 * 类说明: 测试类
 * @author Brando 2018年3月29日 下午2:03:59
 */
public class Launcher {

	public static void main(String[] args) {
		
		AbstractGame football = new Football();
		football.play();
		
		System.out.println("");
		
		AbstractGame basketball = new Basketball();
		basketball.play();
		
	}
	 
}

package org.brando;

/**
 * 
 * 类说明: 基础游戏.
 * @author Brando 2018年5月17日 下午3:20:21
 */
public abstract class AbstractGame {

	/**
	 * 
	 * 方法说明: 初始化游戏
	 * @author Brando 2018年5月17日 下午3:22:38
	 */
	public abstract void initialize();

	/**
	 * 
	 * 方法说明: 开始游戏
	 * @author Brando 2018年5月17日 下午3:22:48
	 */
	public abstract void startPlay();

	/**
	 * 
	 * 方法说明: 结束游戏
	 * @author Brando 2018年5月17日 下午3:22:54
	 */
	public void endPlay() {
		System.out.println("游戏结束..");
	}
	
	/**
	 * 
	 * 方法说明: 模板方法, 规定游戏步骤.
	 * @author Brando 2018年5月17日 下午3:22:06
	 */
	public final void play() {
		// 初始化游戏
		initialize();
		// 开始游戏
		startPlay();
		// 结束游戏
		endPlay();
	}
	
}

package org.brando;

/**
 * 
 * 类说明: 足球
 * @author Brando 2018年5月17日 下午3:23:40
 */
public class Football extends AbstractGame {

	@Override
	public void initialize() {
		System.out.println("初始化足球游戏...");
	}

	@Override
	public void startPlay() {
		System.out.println("开始足球游戏...");
	}

}

package org.brando;

/**
 * 
 * 类说明: 篮球
 * @author Brando 2018年5月17日 下午3:23:40
 */
public class Basketball extends AbstractGame {

	@Override
	public void initialize() {
		System.out.println("初始化篮球游戏...");
	}

	@Override
	public void startPlay() {
		System.out.println("开始篮球游戏...");
	}

}








猜你喜欢

转载自blog.csdn.net/lyq19870515/article/details/80351715