java设计模式之策略模式应用:订单手续费计算

  • 首先在阐述需求之前对一些名词做点解释:
  1. 商户编号:有使用过POS机刷卡的同学,可能都会注意到POS签购单上有一个商户编号,这个编号有15位,前三位代表收单银行,第四位到第七位代表行政区划代码,第八位到第十一位代表商户类型代码及MCC码,最后四位就没什么特殊的了。
  2. 手续费:每一笔订单都会产生一笔手续费,从结算给商户的金额中扣取,和刷卡的客户无太多关系,一般按发卡行:收单机构:银联的比例为7:3:1或者8:1:1进行清分。
  3. 扣率:费率根据商户的类型(MCC)不同而不同,现在民生类的是0.38%的手续费,一般类是0.78%,餐娱类是1.25%。
  4. 订单:订单就是订单啦,应该没人不理解啦。
  • 然后描述需求:

现在针对每一笔订单,都会关联到一个商户;每一个商户关联一个固定商户编号;每个商户编号有不同的扣率。比如:1、按每笔收取固定手续费,没交易一笔订 单,收取5角;2、按百分比收取手续费,比如民生类商户按0.38%收取手续费,封顶金额16元;3、按不同交易金额区间收取不同的手续费,比如 0~5000收取每笔订单1元,5000~50000收取每笔订单5角,大于50000收取每笔订单2角;4、不同交易金额区间按不同百分比收取手续费等 等。

  • 具体设计不做赘述,直接上类图:



 策略接口StrategyCharge定义了一个计算手续费的方法,有四个实现类StrategyWithCount、StrategyWithCountByStage、StrategyWithRatio和StrategyWithRatioByStage,顾名思义,这四个类分别负责计算1每笔收取固定手续费、2每笔按不同金额区间收取不同手续费、3每笔按固定百分比收取手续费和4每笔按不同金额区间根据不同百分比收取手续的计算。

  • 所有类的代码如下:

 

package src.designpattern.strategy.ex2.model;

/**
 * 扣率实体
 * 
 * @author wusj
 * @time 2015年8月10日 上午11:23:06
 */
public class DeductionRate {

	private String id;
	/**
	 * 资金范围开始值
	 */
	private String rangeBottom;
	/**
	 * 资金范围结束值
	 */
	private String rangeTop;
	/**
	 * 扣率,(0,1)之间表示百分比,大于等于1表示每交易扣款金额(单位为分)
	 */
	private String ratio;
	/**
	 * 最大值
	 */
	private String maximum;
	/**
	 * 最小值
	 */
	private String minimum;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getRangeBottom() {
		return rangeBottom;
	}

	public void setRangeBottom(String rangeBottom) {
		this.rangeBottom = rangeBottom;
	}

	public String getRangeTop() {
		return rangeTop;
	}

	public void setRangeTop(String rangeTop) {
		this.rangeTop = rangeTop;
	}

	public String getRatio() {
		return ratio;
	}

	public void setRatio(String ratio) {
		this.ratio = ratio;
	}

	public String getMaximum() {
		return maximum;
	}

	public void setMaximum(String maximum) {
		this.maximum = maximum;
	}

	public String getMinimum() {
		return minimum;
	}

	public void setMinimum(String minimum) {
		this.minimum = minimum;
	}

}
 
package src.designpattern.strategy.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值