文章目录
前言
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。在一些固定的步骤中由子类来实现个性化的步骤或者算法操作。
一、模板方式
在一 个抽象类公开定义了执行它的方法 的模板。它的子类可以按需要重写方法 实现,但调用将以抽象类中定义的方式进行。
二、模板模式示例
定义一个支付流程的抽象模板,此例子可能不太好,能够说明流程即可。
1.定义抽象的支付流程
package behavior.TemplatePattern;
/**
* 定义一个支付的流程
*
*/
public abstract class PaymentProcess {
//模板
public final void pay(){
//下单
tradePay();
//下单通知
tardeNotify();
//退费
refund();
//查询订单
queryOrder();
//对账
bill();
}
//下单
abstract void tradePay();
//支付通知
abstract void tardeNotify();
//退款
abstract void refund();
//查询订单
abstract void queryOrder();
//对账
abstract void bill();
}
2.具体的类
package behavior.TemplatePattern;
public class AliPay extends PaymentProcess{
@Override
void tradePay() {
System.out.println("支付宝支付下单....");
}
@Override
void tardeNotify() {
System.out.println("支付宝支付结果通知....");
}
@Override
void refund() {
System.out.println("支付宝退费....");
}
@Override
void queryOrder() {
System.out.println("支付宝查询订单....");
}
@Override
void bill() {
System.out.println("支付宝支付对账...");
}
}
package behavior.TemplatePattern;
public class WechatPay extends PaymentProcess{
@Override
void tradePay() {
System.out.println("微信支付下单...");
}
@Override
void tardeNotify() {
System.out.println("微信支付支付结果通知...");
}
@Override
void refund() {
System.out.println("微信支付退费...");
}
@Override
void queryOrder() {
System.out.println("微信支付查询定单...");
}
@Override
void bill() {
System.out.println("微信支付对账...");
}
}
3 测试
package behavior.TemplatePattern;
public class WechatPay extends PaymentProcess{
@Override
void tradePay() {
System.out.println("微信支付下单...");
}
@Override
void tardeNotify() {
System.out.println("微信支付支付结果通知...");
}
@Override
void refund() {
System.out.println("微信支付退费...");
}
@Override
void queryOrder() {
System.out.println("微信支付查询定单...");
}
@Override
void bill() {
System.out.println("微信支付对账...");
}
}
支付宝支付下单....
支付宝支付结果通知....
支付宝退费....
支付宝查询订单....
支付宝支付对账...
微信支付下单...
微信支付支付结果通知...
微信支付退费...
微信支付查询定单...
微信支付对账...
总结
本篇简单的介绍的模板方式的使用,模板模式在一些固定的流程中可以考虑使用。