模板方法模式&策略模式區別聯系
阿新 • • 發佈:2018-09-15
支持 余額 rri get system 流程 lda public ()
一、模板方法
模板方法模式:定義 一系列算法, 子類延伸實現。著重點在於:子類去處理不同的方法實現。 看下面例子。
假如一個支付 都包含三個部分: 生成訂單 ----》調用API發起支付-----------》處理訂單
1.基類
/**
* 〈購物流程〉<br>
* 〈模板方法基類〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public abstract class AbstractPay {
/**
* 1、生產訂單
*/
public void genrateOrder() {
System.out.println("正在生成業務方訂單");
}
/**
* 2、調用API 發起支付
*/
abstract void pay();
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
abstract void handleOrder();
}
2 微信支付實現類
/**
* 〈一句話功能簡述〉<br>
* 〈微信支付〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class Wxpay extends AbstractPay {
/**
* 2、調用API 發起支付
*/
@Override
void pay() {
System.out.println("調用微信支付發起支付");
}
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
@Override
void handleOrder() {
System.out.println("處理微信回調。 查詢訂單是否處理完成");
}
}
3、支付寶支付
/**
* 〈一句話功能簡述〉<br>
* 〈支付寶支付〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class Alipay extends AbstractPay{
/**
* 2、調用API 發起支付
*/
@Override
void pay() {
System.out.println("調用支付寶API發起支付");
}
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
@Override
void handleOrder() {
System.out.println("處理支付寶回調。 查詢訂單是否處理完成");
}
}
4.測試類
/**
* 〈一句話功能簡述〉<br>
* 〈測試 類〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class TestPay {
public static void main(String[] args) {
Alipay alipay = new Alipay();
alipay.genrateOrder();
alipay.pay();
alipay.handleOrder();
Wxpay wxpay = new Wxpay();
wxpay.genrateOrder();
wxpay.pay();
wxpay.handleOrder();
}
}
5 結果
正在生成業務方訂單
調用支付寶API發起支付
處理支付寶回調。 查詢訂單是否處理完成
我是分割線==============================》
正在生成業務方訂單
調用微信支付發起支付
處理微信回調。 查詢訂單是否處理完成
6、總結
模板方法主要體現在子類的分別實現。
=======================================================================================================================================================
7 策略模式:
策略模式 體現在策略兩個字上, 舉個例子 ,星期 1 3 5 用微信支付, 星期 246 用支付寶支付,星期天都可以用,調用者 可隨意替換支持的支付方式。
用之前的模板方法模式幾個類。
二、策略模式
1、基類
/**
* 〈購物流程〉<br>
* 〈模板方法基類〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public abstract class AbstractPay {
/**
* 1、生產訂單
*/
public void genrateOrder() {
System.out.println("正在生成業務方訂單");
}
/**
* 2、調用API 發起支付
*/
abstract void pay();
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
abstract void handleOrder();
}
2、微信支付
/**
* 〈一句話功能簡述〉<br>
* 〈微信支付〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class Wxpay extends AbstractPay {
/**
* 2、調用API 發起支付
*/
@Override
void pay() {
System.out.println("調用微信支付發起支付");
}
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
@Override
void handleOrder() {
System.out.println("處理微信回調。 查詢訂單是否處理完成");
}
}
三、支付寶支付
/**
* 〈一句話功能簡述〉<br>
* 〈支付寶支付〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class Alipay extends AbstractPay{
/**
* 2、調用API 發起支付
*/
@Override
void pay() {
System.out.println("調用支付寶API發起支付");
}
/**
* 3 回調接口,處理訂單, 給用戶加余額
*/
@Override
void handleOrder() {
System.out.println("處理支付寶回調。 查詢訂單是否處理完成");
}
}
4、調用者策略處理測試類(核心)
/**
* 〈一句話功能簡述〉<br>
* 〈測試 類〉
*
* @author liangxing.zhu
* @create 2018/9/15
* @since 1.0.0
*/
public class TestPay {
public static void main(String[] args) {
AbstractPay abstractPay = null ;
int day = LocalDate.now().getDayOfWeek().getValue();
if(day%2==1){
abstractPay = new Alipay();
System.out.println("策略開始。今天的時間是星期:"+day+",使用的支付方式是:aliPay");
}else if(day%2==0){
abstractPay = new Wxpay();
System.out.println("策略開始。今天的時間是星期:"+day+",使用的支付方式是:wxPay");
}
abstractPay.genrateOrder();
abstractPay.pay();
abstractPay.handleOrder();
}
}
5 結果
策略開始。今天的時間是星期:6,使用的支付方式是:wxPay
正在生成業務方訂單
調用微信支付發起支付
處理微信回調。 查詢訂單是否處理完成
6 總結:
策略模式 核心在 使用者的策略。 如果按照自己的策略去替換。模板方法模式 核心在 子類的 怎麽實現。
模板方法模式&策略模式區別聯系