收银折扣方式:1、正常收费,2、满300减100,3、打八折
行为都是相同的:收银。但具体的实现方式不同。
简单工厂 ![](https://img-blog.csdnimg.cn/fe9a22cfeef648eca722e0f6cbecaf64.png)
现金收取方式抽象类
public abstract class CashSuper {
public abstract double accept(double money);
}
正常收费方式类
public class CashNormal extends CashSuper {
@Override
public double accept(double money) {
return money;
}
}
收费方式工厂
public class CashFactory {
public static CashSuper createCashAccept(String type) {
CashSuper cs = null;
switch (type) {
case "Normal":
cs = new CashNormal();
break;
case "Rebate":
cs = new CashRebate(0.8d);
break;
}
return cs;
}
}
客户端调用
public class Client {
public static void main(String[] args) {
CashSuper normal = CashFactory.createCashAccept("Rebate");
double accept = normal.accept(100d);
System.out.println(accept);
}
}
策略模式
策略模式使用Context代替工厂
public class CashContext {
private CashSuper cs;
public CashContext(String type) {
switch (type) {
case "Normal":
cs = new CashNormal();
break;
case "Rebate":
cs = new CashRebate(0.8d);
break;
}
}
public double getResult(double money) {
return this.cs.accept(money);
}
}
客户端调用
public class Client {
public static void main(String[] args) {
CashContext context = new CashContext("Rebate");
double result = context.getResult(100d);
System.out.println(result);
}
}