如何在Java项目中实现一个策略模式和模板方法模式

  介绍

今天就跟大家聊聊有关如何在Java项目中实现一个策略模式和模板方法模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1只;策略模式

策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。

当你有许多仅在执行某些行为时略有不同的相似类时,可使用策略模式。使用该模式能将类的业务逻辑与其算法实现细节隔离开来。

说白了,其实还是解耦

如何在Java项目中实现一个策略模式和模板方法模式

策略模式的结构如上图所示,主要包含三个角色:

<李>

抽象角色:通常是一个接口

<李>

具体角色:接口的具体实现

<李>

环境角色:调用接口的上下文环境,通常是一段业务逻辑方法

举个常见的例子:支付

先定义一个接口PayStrategy。java

package  com.example.service;      import  com.example.domain.dto.PayDTO;   import  com.example.domain.dto.PayDetailDTO;/* *   ,* @author  ChengJianSheng   ,* @date  2021/1/11   ,*/public  interface  PayStrategy  {      ,/* *   ,,*,下的单   ,,*/PayDTO 才能;预付();      ,/* *   ,,*,查询   ,,*/PayDetailDTO 才能查询();      ,/* *   ,,*,撤销   ,,*/void 才能取消();      ,/* *   ,,*,退款   ,,*/void 才能退款();      }

然后是具体实现

AlipayStrategy.java 

package  com.example.service.impl;      import  com.alipay.api.AlipayClient;   import  com.alipay.api.request.AlipayTradePrecreateRequest;   import  com.alipay.api.response.AlipayTradeCancelResponse;   import  com.example.domain.dto.PayDTO;   import  com.example.domain.dto.PayDetailDTO;   import  com.example.service.PayStrategy;   import  org.springframework.beans.factory.annotation.Autowired;   import  org.springframework.stereotype.Component;/* *   *大敌;https://opendocs.alipay.com/open/common/abilitymap   *大敌;https://opendocs.alipay.com/open/194/106078   ,*扫码支付   ,*/@ component   public  class  AlipayStrategy  implements  PayStrategy  {      @ autowired才能   private 才能;AlipayClient  alipayClient;      @Override才能   public 才能;PayDTO 预付(),{   ,,,AlipayTradePrecreateRequest  request =, new  AlipayTradePrecreateRequest ();   ,,,AlipayTradeCancelResponse  response =, alipayClient.execute(请求);   ,,,return 零;   ,,}      @Override才能   public 才能;PayDetailDTO 查询(),{   ,,,return 零;   ,,}      @Override才能   public 才能;void 取消(),{      ,,}      @Override才能   public 才能;void 退款(),{      ,,}      public 才能;void  payNotify (String 数据),{      ,,}      public 才能;void  refundNotify (), {      ,,}   }

WeixinPayStrategy。java

package  com.example.service.impl;      import  com.example.domain.dto.PayDTO;   import  com.example.domain.dto.PayDetailDTO;   import  com.example.service.PayStrategy;   import  com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;   import  com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest;   import  com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;   import  com.github.binarywang.wxpay.service.WxPayService;   import  org.springframework.beans.factory.annotation.Autowired;   import  org.springframework.stereotype.Component;/* *   *大敌;https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/index.shtml   *大敌;https://github.com/Wechat-Group/WxJava/wiki/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98   ,* @author  ChengJianSheng   ,* @date  2021/1/11   ,*/@ component   public  class  WeixinPayStrategy  implements  PayStrategy  {      @ autowired才能   private 才能;WxPayService  wxPayService;      @Override才能   public 才能;PayDTO 预付(),{   ,,,WxPayUnifiedOrderRequest  request =, new  WxPayUnifiedOrderRequest ();   ,,,wxPayService.createOrder(请求);   ,,,return 零;   ,,}      @Override才能   public 才能;PayDetailDTO 查询(),{   ,,,WxPayOrderQueryRequest  request =, new  WxPayOrderQueryRequest ();   ,,,wxPayService.queryOrder(请求);   ,,,return 零;   ,,}      @Override才能   public 才能;void 取消(),{      ,,}      @Override才能   public 才能;void 退款(),{      ,,}      public 才能;void  payNotify (String 数据),{   ,,,WxPayOrderNotifyResult  result =, wxPayService.parseOrderNotifyResult(数据);   ,,}      public 才能;void  refundNotify (String 数据),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在Java项目中实现一个策略模式和模板方法模式