在处理过程中,总是会碰到因为一些原因在功能上会作出调整,增加功能,或者减少一部分功能,但是每次我们都要翻看源码一点一点去改动,还要担心自己的改动是否会对已有的功能有所影响。这就会显得有些麻烦了。如果我们对算法进行分析后把他封装,能做到在不同时间应用不同的业务规则,我想这样应该会方便很多。例如:
在商场管理软件中,商场的促销活动可能会有很多种,不促销、打折、满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);
}
}
更多资源