模板方法模式-Template Pattern

基本概念

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。也可以通俗地理解为把不变的行为移到超类,从而去除子类中的重复代码。

结构图

上图摘自《大话设计模式》

应用场景

当不可变和可变的行为同时出现在子类中时,在子类的方法中就不可避免地会重复实现那些不变的行为,这是就可以使用模板方法模式,把重复的不变的内容移到超类,作为所谓的模板。

源码示例(将游戏的几个步骤抽象为模板)

1.定义抽象游戏类

package com.spook.template;

/**
 * 抽象游戏类,作为模板,假定玩游戏有固定的套路:初始化、开始、结束
 */
public abstract class Game {
	abstract void init();

	abstract void start();

	abstract void end();

	/**
	 * 模板方法,此处定义为final,防止子类覆写
	 */
	public final void play() {
		init();
		start();
		end();
	}

}

2.定义一个网游类

package com.spook.template;

/**
 * 网页游戏类,玩游戏也是相同的三个步骤
 */
public class WebGame extends Game {

	@Override
	void init() {
		// TODO Auto-generated method stub
		System.out.println("网页游戏初始化");
	}

	@Override
	void start() {
		// TODO Auto-generated method stub
		System.out.println("网页游戏开始");
	}

	@Override
	void end() {
		// TODO Auto-generated method stub
		System.out.println("网页游戏结束");
	}

}
3.定义一个手游类

package com.spook.template;

/**
 * 手机游戏类,玩游戏也是相同的三个步骤
 */
public class MobileGame extends Game {

	@Override
	void init() {
		// TODO Auto-generated method stub
		System.out.println("手机游戏初始化");
	}

	@Override
	void start() {
		// TODO Auto-generated method stub
		System.out.println("手机游戏开始");
	}

	@Override
	void end() {
		// TODO Auto-generated method stub
		System.out.println("手机游戏结束");
	}

}
4.测试类

package com.spook.template;

/**
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Game webGame = new WebGame();
		webGame.play();
		System.out.println("-------------");

		Game mobileGame = new MobileGame();
		mobileGame.play();
	}

}
运行测试类输出如下内容:

网页游戏初始化
网页游戏开始
网页游戏结束
-------------
手机游戏初始化
手机游戏开始
手机游戏结束





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值