1、问题描述
小明家的超市推出了不同的购物优惠策略,你可以根据自己的需求选择不同的优惠方式。其中,有两种主要的优惠策略:
- 九折优惠策略:原价的90%。
- 满减优惠策略:购物满一定金额时,可以享受相应的减免优惠。
具体的满减规则如下:
满100元减5元
满150元减15元
满200元减25元
满300元减40元
请你设计一个购物优惠系统,用户输入商品的原价和选择的优惠策略编号,系统输出计算后的价格。
输入示例
4
100 1
200 2
300 1
300 2
输出示例
90
175
270
260
2、模式
类似代理模式,Context是那个代理,一个Context只包含了一个策略接口的引用,Context包含不同策略的引用,在Context中处理掉用哪种策略
3、代码
import com.sun.java.accessibility.util.TopLevelWindowListener;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
for(int i=0;i<number;i++){
int a=sc.nextInt();
int b=sc.nextInt();
if(b==1){
Context c=new Context(new ConcreteStrategy1());
c.discount(a);
}else{
Context c=new Context(new ConcreteStrategy2());
c.discount(a);
}
}
}
}
interface Strategy{
void DiscountStrategy(int price);
}
class ConcreteStrategy1 implements Strategy{
@Override
public void DiscountStrategy(int price) {
System.out.println((int)(price*0.9));
}
}
class ConcreteStrategy2 implements Strategy{
@Override
public void DiscountStrategy(int price) {
if(price>=100&&price<150){
System.out.println((int)price-5);
}else if(price>=150&&price<200){
System.out.println((int)price-15);
}else if(price>=200&&price<250){
System.out.println((int)price-25);
}else{
System.out.println((int)price-40);
}
}
}
class Context{
private Strategy strategy;
Context(Strategy s){
this.strategy=s;
}
public void discount(int price){
strategy.DiscountStrategy(price);
}
}