1.所用到的类
一个抽象类:用于派生子类
一个Context类:用于变成各种子类形态
N个子类:
2.实现代码
抽象类
public abstract class CashSuper {
public abstract double acceptCash(double money);
}
Context类
public class CashContext {
private CashSuper cs;
public CashContext(String type)
{
switch ( type)
{
case "正常收费":
cs = new CashNormal();
break;
case "满减收费":
cs = new CashReturn(300,100);
break;
case "打折收费":
cs = new CashRebate(0.8);
break;
}
}
public double getResult(double money)
{
return cs.acceptCash(money);
}
}
子类1
public class CashNormal extends CashSuper {
@Override
public double acceptCash(double money) {
return money;
}
}
子类2
public class CashRebate extends CashSuper {
private double moneyCondition = 0.0d;
public CashRebate(double moneyCondition)
{
this.moneyCondition = moneyCondition;
}
@Override
public double acceptCash(double money) {
return money*moneyCondition;
}
}
子类3
public class CashReturn extends CashSuper {
private double moneyCondition = 0.0d;
private double moneyReturn = 0.0d;
public CashReturn(double moneyCondition,double moneyReturn){
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
@Override
public double acceptCash(double money) {
if (money >= moneyCondition)
return money - Math.floor(money / moneyCondition) * moneyReturn;
return money;
}
}
调用类
@SpringBootApplication
public class StrategyApplication {
public static void main(String[] args) {
double money = 0;
money = money + new CashContext("正常收费").getResult(500);
money = money + new CashContext("满减收费").getResult(500);
money = money + new CashContext("打折收费").getResult(500);
System.out.println( money);
}
}
3.总结
工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为。工厂模式在调用的时候是产生多种子类的实现类,而策略模式则都是产生Context类只是运行算法不同。