[设计模式] ------ 模板模式

模板模式

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

一般是定义一个抽象类,有抽象方法,有骨架方法,骨架方法中会定义这几个抽象方法的调用顺序。
然后再定义多个实现类,继承这个抽象类,那么就得覆盖父类的抽象方法,那么每个实现类调用骨架方法,最终的结构就是按照父类中预先定义好的调用顺序,去调用自己实现的各个抽象方法。这就是效果

举个网上的例子,我觉得写的挺通俗易懂的:

/**
 *这个抽象类,有三个抽象方法(initGame,startGame,endGame),
 *一个骨架方法playGame,
 *骨架方法中主要就是定义了三个抽象方法的执行顺序
 */
public abstract class GameTemplate {
	/** 初始化游戏 */
	abstract void initGame();
	/** 开始游戏 */
	abstract void startGame();
	/** 结束游戏 */
	abstract void endGame();
	
	public final void playGame() {
		initGame();
		startGame();
		endGame();
	}
}
/**
 * 亡者农药,分别实现三个抽象方法,自己具体实现
 */
public class GloryOfKings extends GameTemplate {
	@Override
	void initGame() {
		System.out.println("初始化亡者农药");
	}

	@Override
	void startGame() {
		System.out.println("开始亡者农药");
	}

	@Override
	void endGame() {
		System.out.println("结束亡者农药");
	}
}
/**
 * LOL,也分别实现三个抽象方法,自己具体实现
 */
public class LOL extends GameTemplate {
	@Override
	void initGame() {
		System.out.println("初始化LOL");
	}

	@Override
	void startGame() {
		System.out.println("开始LOL");
	}

	@Override
	void endGame() {
		System.out.println("结束LOL");
	}
}
/**
 * 测试,分别拿到两个子类,去调用骨架方法playGame
 * 那么最终的结果就是两个子类各自实现的三个抽象方法,
 * 都会按照父抽象类中骨架定义的执行顺序依次执行
 * 
 * 子类在实现的过程中没有必要定义这些执行顺序,因为在父类中都做好了
 */
public static void main(String[] args) {
    GameTemplate gloryOfKings = new GloryOfKings();
    gloryOfKings.playGame();

    
    GameTemplate lol = new LOL();
    lol.playGame();
}

猜你喜欢

转载自blog.csdn.net/java_zhangshuai/article/details/85316171