模板方法模式&策略模式区别联系

一、模板方法

模板方法模式:定义 一系列算法, 子类延伸实现。着重点在于:子类去处理不同的方法实现。 看下面例子。

假如一个支付 都包含三个部分: 生成订单 ----》调用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 总结:

策略模式 核心在 使用者的策略。 如果按照自己的策略去替换。模板方法模式 核心在 子类的 怎么实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值