SSM前言(五)之模板方法设计模式

一、模板方法设计模式

在现实生活中,完成某件事情是需要n多个固定步骤的。如“在淘宝网进行购物”这件事情的完成一般需要三个步骤:登录网站、挑选商品、付款。但对于登录网站与付款这两步,每个人几乎都是相同的操作。但不同的地方是,每个人所挑选的商品是不同的。
在软件开发过程中同样存在这样的情况。某类的某个方法的实现,需要几个固定步骤。在这些固定步骤中,对于该类的不同对象,有些步骤的实现是固定不变的,有些步骤的实现是大相径庭的,有些步骤的实现是可变可不变的。对于这种情况,就适合使用模板方法设计模式编程。

模板方法设计模式的定义是:定义一个操作中某种算法的框架,而将一些步骤延迟到子类中模板方法模式使得子类在不改变一个算法结构的前提下,对某些步骤实现个性化定义

 1.1 模板方法程序构成

    在模板方法设计模式中,存在一个父类。其中包含两类方法:模板方法步骤方法
    模板方法,即实现某种算法的方法步骤。而这些步骤都是调用的步骤方法完成的。

    步骤方法,即完成模板方法的每个阶段性方法。每个步骤方法完成某一特定的、完成总算法的一部分功能。

    步骤方法有三种类型:抽象方法、最终方法与钩子方法。

    抽象方法,是要求子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。
    最终方法,是子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一样的步骤。

    钩子方法,是父类给出了默认实现,但子类也可以重写的方法


1.2 程序举例

本例用于模拟“在淘宝网购物”这件事情的完成过程。

1.2.1 定义父类

这个父类指的是包含模板方法的父类。本例是个抽象类。

package com.itcast.service;

/**
 * 模板方法的父类
 * @author jack
 *
 */
public abstract class ShoppingService {
	/**
	 * 模板方法
	 */
	public void buyGoods(){
		userLogin();
		buy();
		pay();
		
	}



	/**
	 * 子类不能重写的方法
	 */
	public void userLogin() {
		System.out.println("用户登录");
		
	}
	/**
	 * 子类必须实现的方法
	 */
	public abstract void buy() ;
	
	/**
	 * 钩子方法:之类可以重写
	 */
	public void pay() {
		
		System.out.println("使用银联进行支付");
		
	}
}
1.2.1定义子类

    购买鞋子子类

package com.itcast.service;

/**
 * 购买鞋子
 * @author jack
 *
 */
public class ShoesShoppingService extends ShoppingService {

	@Override
	public void buy() {

		System.out.println("购买花花公子运动鞋");

	}

}

购买衣服子类

package com.itcast.service;

/**
 * 购买衣服
 * @author jack
 *
 */
public class ClothesShoppingService extends ShoppingService {

	@Override
	public void buy() {
		System.out.println("购买海澜之家西服");

	}
	
	@Override
	public void pay(){
		System.out.println("使用支付宝付款");
	}

}

1.2.3 测试类

package com.itcast.test;

import com.itcast.service.ClothesShoppingService;
import com.itcast.service.ShoesShoppingService;
import com.itcast.service.ShoppingService;
/**
 * 模板方法---购物测试类
 * @author jack
 *
 */
public class ShoppingTest {

	public static void main(String[] args) {
		ShoppingService shoes =new ShoesShoppingService();
		ShoppingService clothes=new ClothesShoppingService();
		
		shoes.buyGoods();
		System.out.println("---------------------");
		clothes.buyGoods();
	}

}

运行结果:

用户登录
购买花花公子运动鞋
使用银联进行支付
---------------------
用户登录
购买海澜之家西服
使用支付宝付款


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值