场景是商城打折促销,正常收费,打8折收费,每满500减少50收费
这里结合简单工厂模式来产生不同的收费策略。而每个收费策略都有一个公共的抽象类
<strong></strong>
公共的抽象类:
/**
* 收费抽象类
* @author Administrator
*
*/
public abstract class CashSuper {
//抽象的收费方法
public abstract double getCash();
}
收费的各个具体实现类:
/**
* 正常收费
* @author Administrator
*
*/
public class CashNormal extends CashSuper {
private double price; //商品单价
private int num; //商品数量
@Override
public double getCash() {
return price*num;
}
public CashNormal(double price, int num) {
super();
this.price = price;
this.num = num;
}
}
--------------------------------------------------
/**
* 打折收费8折
* @author Administrator
*
*/
public class CashDiscount extends CashSuper{
private double price; //商品单价
private int num; //商品数量
@Override
public double getCash() {
return price*num*0.8;
}
public CashDiscount(double price, int num) {
super();
this.price = price;
this.num = num;
}
}
----------------------------------------------------
/**
* 促销收费每满500减少50
* @author Administrator
*
*/
public class CashPromotion extends CashSuper {
private double price; //商品单价
private int num; //商品数量
@Override
public double getCash() {
double num_500 = 0;
double cash = price*num;
if(cash>=500){
num_500 = (cash/500.0);
}
return cash-((int)num_500)*50;
}
public CashPromotion(double price, int num) {
super();
this.price = price;
this.num = num;
}
}
简单工厂模式来生成不同的策略对象:
/**
* 简单工厂模式和策略模式结合
*
* @author Administrator
*
*/
public class CashFactory {
private static CashSuper cashSuper;
public static final int NORMAL_CASH = 1;
public static final int PROMOTION_CASH = 2;
public static final int DISCOUNT_CASH = 3;
public static CashSuper createCash(int strategy,double price,int num) {
switch (strategy) {
case PROMOTION_CASH:
cashSuper = new CashPromotion(price, num);
break;
case DISCOUNT_CASH:
cashSuper = new CashDiscount(price, num);
break;
case NORMAL_CASH:
default:
cashSuper = new CashNormal(price, num);
break;
}
return cashSuper;
}
}
测试类:
/**
* 根据不同的策略产生不同的算法,算法利用简单工厂模式来产生
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
CashSuper cashSuper = CashFactory.createCash(CashFactory.NORMAL_CASH, 90, 20);
System.out.println("正常收费:"+cashSuper.getCash());
cashSuper = CashFactory.createCash(CashFactory.DISCOUNT_CASH, 90, 20);
System.out.println("打8折收费:"+cashSuper.getCash());
cashSuper = CashFactory.createCash(CashFactory.PROMOTION_CASH, 90, 20);
System.out.println("满500减少50收费:"+cashSuper.getCash());
}
}