1,定义策略接口:
public interface DiscountStategy {
public String type();
public double discount(double fee);
}
2,实现接口:
@Component
public class AdisCount implements DiscountStategy {
@Override
public String type() {
return “a”;
}
@Override
public double discount(double fee) {
return fee;
}
}
@Component
public class BdisCount implements DiscountStategy {
@Override
public String type() {
return “b”;
}
@Override
public double discount(double fee) {
return fee*0.9;
}
}
@Component
public class Cdiscount implements DiscountStategy {
@Override
public String type() {
return “c”;
}
@Override
public double discount(double fee) {
return fee*0.8;
}
}
3,service处理:
@Service
public class SaleService {
Map<String,DiscountStategy> map = Maps.newHashMap();
public SaleService(List<DiscountStategy> stategies) {
this.map = stategies.stream().collect(Collectors.toMap(DiscountStategy::type, a->a));
}
public double sale(String type,double fee){
return map.get(type).discount(fee);
}
}
4:测试:
@RestController
public class TestDiscoutDemo {
@Autowired
SaleService saleService;
@GetMapping("/testStrategy")
public void testDiscount(){
System.out.println(saleService.sale("a", 10));
System.out.println(saleService.sale("b", 10));
System.out.println(saleService.sale("c", 10));
}
}
5,结果:
10.0
9.0
8.0