设计模式代码实战-策略模式

1、问题描述

小明家的超市推出了不同的购物优惠策略,你可以根据自己的需求选择不同的优惠方式。其中,有两种主要的优惠策略:

  1. 九折优惠策略:原价的90%。
  2. 满减优惠策略:购物满一定金额时,可以享受相应的减免优惠。
    具体的满减规则如下:
    满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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值