02_StrategyPattern 商场促销

[color=blue]CashFactory工厂类[/color]

package cn;

import java.lang.reflect.Constructor;
import java.util.HashMap;

public class CashFactory {
private static CashSuper cashSuper;
private static HashMap m = new HashMap();
private static void initMap(){
m.put("CashNormal", "cn.beans.CashNormal");
m.put("CashRebate", "cn.beans.CashRebate");
m.put("CashReturn", "cn.beans.CashReturn");
}
public static CashSuper getInstance(String type){
initMap();
try {
String clazz;
//无参构造,用setter
clazz=m.get(type).toString();
cashSuper=(CashSuper)Class.forName(clazz).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return cashSuper;
}


public static CashSuper getInstance(String type, String[] parameters){
if (parameters==null){
return getInstance(type);
}
initMap();
try {
//带参构造
String clazz=m.get(type).toString();
//根据类名获取Class对象
Class cs = Class.forName(clazz);
//参数类型数组
Class[] parameterTypes=new Class[parameters.length];
for (int i=0;i<parameters.length;i++){
parameterTypes[i]=String.class;
}
//根据参数类型获取相应的构造函数
System.err.println(parameterTypes==null);
Constructor constructor=cs.getConstructor(parameterTypes);
//根据获取的构造函数和参数,创建实例
Object o=constructor.newInstance(parameters);
cashSuper = (CashSuper)o;
} catch (Exception e) {
e.printStackTrace();
}

return cashSuper;
}
}


[color=blue]CashSuper策略接口[/color]

package cn;

public interface CashSuper {
public String acceptCash(String costPrice);
}


[color=blue]CashContext策略上下文,衔接策略接口和调用策略的类[/color]

package cn.beans;

import cn.CashSuper;

public class CashContext {

private CashSuper cashSuper;

public CashContext(CashSuper cashSuper){
this.cashSuper=cashSuper;
}

//传递策略接口内容
public String acceptCash(String costPrice){
return cashSuper.acceptCash(costPrice);
}

}


[color=blue]CashNormal普通Cash类[/color]

package cn.beans;

import cn.CashSuper;

public class CashNormal implements CashSuper {

@Override
public String acceptCash(String costPrice) {
System.err.println("我是CashNormal的acceptCash中");
return costPrice;
}

}


[color=blue]CashRebate打折Cash类[/color]

package cn.beans;

import java.math.BigDecimal;

import cn.CashSuper;

public class CashRebate implements CashSuper{

private String rebate="1";

@Override
public String acceptCash(String costPrice) {
System.err.println("我在CashRebate的acceptCash中");
BigDecimal dcm = new BigDecimal(costPrice.toCharArray());
BigDecimal dcmRebate = new BigDecimal(rebate.toCharArray());
//保留两位小数
dcm = dcm.multiply(dcmRebate).setScale(2,BigDecimal.ROUND_HALF_UP);
return dcm.toString();
}

public CashRebate() {
super();
}

public CashRebate(String rebate) {
super();
this.rebate = rebate;
}

public void setRebate(String rebate) {
this.rebate = rebate;
}

}


[color=blue]CashReturn返利Cash类[/color]

package cn.beans;

import java.math.BigDecimal;

import cn.CashSuper;

public class CashReturn implements CashSuper {

private String cashCondition;
private String cashReturn;

public CashReturn(){
super();
}

public CashReturn(String cashCondition,String cashReturn){
super();
this.cashCondition=cashCondition;
this.cashReturn=cashReturn;
}

public void setCashCondition(String cashCondition) {
this.cashCondition = cashCondition;
}

public void setCashReturn(String cashReturn) {
this.cashReturn = cashReturn;
}

@Override
public String acceptCash(String costPrice) {
System.err.println("我在CashReturn的acceptCash中");
BigDecimal dcm = new BigDecimal(costPrice.toCharArray());
BigDecimal dcmCondition = new BigDecimal(cashCondition.toCharArray());
BigDecimal dcmReturn = new BigDecimal(cashReturn.toCharArray());
BigDecimal dcmTemp = new BigDecimal(0);
dcmTemp = dcm.divide(dcmCondition,0,BigDecimal.ROUND_DOWN);
dcmTemp = dcmReturn.multiply(dcmTemp);
dcm = dcm.subtract(dcmTemp);
return dcm.toString();
}

}


[color=blue]JUnit测试类[/color]

package junit.test;

import org.junit.Test;

import cn.CashFactory;
import cn.CashSuper;
import cn.beans.CashContext;
import cn.beans.CashNormal;
import cn.beans.CashRebate;
import cn.beans.CashReturn;


public class Test_Cash {
@Test public void test(){
//不打折
CashSuper cashSuper=CashFactory.getInstance("CashNormal");
CashContext cashContext = new CashContext(cashSuper);
String price = cashContext.acceptCash("1000");
System.err.println(price);
//打八折 setter
CashRebate cashRebate=(CashRebate)CashFactory.getInstance("CashRebate");
cashRebate.setRebate("0.8");
cashContext = new CashContext(cashRebate);
price = cashContext.acceptCash("1000");
System.err.println(price);
//满300返100 setter
CashReturn cashReturn = (CashReturn)CashFactory.getInstance("CashReturn");
cashReturn.setCashCondition("300");
cashReturn.setCashReturn("100");
cashContext = new CashContext(cashReturn);
price = cashContext.acceptCash("1000");
System.err.println(price);
System.err.println("................以下为带参构造.....................");
//满200返100 constructor
String [] paramReturn= {"200","100"};
cashReturn = (CashReturn)CashFactory.getInstance("CashReturn",paramReturn);
cashContext = new CashContext(cashReturn);
price = cashContext.acceptCash("1000");
System.err.println(price);
//打八五折 constructor
String [] paramRebate = {"0.85"};
cashRebate = (CashRebate)CashFactory.getInstance("CashRebate",paramRebate);
cashContext = new CashContext(cashRebate);
price = cashContext.acceptCash("1000");
System.err.println(price);
//不打折
CashNormal cashNormal = (CashNormal)CashFactory.getInstance("CashNormal",null);
cashContext = new CashContext(cashNormal);
price = cashContext.acceptCash("1000");
System.err.println(price);

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值