【随笔】封装算法,在不同时间应用不同的业务规则

本文介绍了一种使用设计模式实现商场促销活动的灵活处理方法。通过定义抽象类和多个具体实现类,可以轻松应对不同的促销策略,如正常收费、打折及满减等。此方法简化了代码维护,并提高了代码复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在处理过程中,总是会碰到因为一些原因在功能上会作出调整,增加功能,或者减少一部分功能,但是每次我们都要翻看源码一点一点去改动,还要担心自己的改动是否会对已有的功能有所影响。这就会显得有些麻烦了。如果我们对算法进行分析后把他封装,能做到在不同时间应用不同的业务规则,我想这样应该会方便很多。例如:
在商场管理软件中,商场的促销活动可能会有很多种,不促销、打折、满300返100等等,那我们就需要能做对这些情况作出处理,不能每次商城做一次活动我们就要来一次大手术。。。
言归正转,我们只需要对相应模块的算法封装一下就好,比如:
我们可以先定义一个算法的抽象类:

public abstract class Sales { // 父类
public abstract Double Count(Double money);
}

然后定义各个实现算法的子类:
public class SaleRebate extends Sales { // 打折算法
private Double rebate;

public SaleRebate(String rebate) {
	this.rebate = Double.parseDouble(rebate);
}

public Double Count(Double money) {
	money = money * rebate;
	return money;
}

}

public class normal extends Sales {

public Double Count(Double money) {
	return money;
}

}

public class Return extends Sales {
private Double get;
private Double Retu;

public Return(String get, String Retu) {
	this.get = Double.parseDouble(get);
	this.Retu = Double.parseDouble(Retu);
}

public Double Count(Double money) {
	money = money - money / get * Retu;
	return money;
}

}

下面就是选择器了,我们可以在这里得到自己想要实现的 算法,如果要对功能进行增加或修改只需要更改一部分代码就行,还能提高代码的重用性。

public class Context {
Sales Sales = null;

public Context(String type) {   //传递想要实现算法的类型
	switch (type) {
	case "正常收费":
		Sales = new normal(); // 正常收费
		break;
	case "打8折":
		Sales = new SaleRebate("0.8"); // 打折
		break;
	case "满300返100":
		Sales = new Return("300", "100");// 满300返100
		break;
	default:
	}
}

public Double getReturn(Double money) { // 得到商场促销后应该收取的费用
	return Sales.Count(money);
}

}
更多资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值