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

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);
    }
}

相关推荐

  1. 设计模式——策略模式

    2024-04-22 03:30:03       48 阅读
  2. 设计模式-策略模式

    2024-04-22 03:30:03       59 阅读
  3. 设计模式——策略模式

    2024-04-22 03:30:03       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 03:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 03:30:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 03:30:03       82 阅读
  4. Python语言-面向对象

    2024-04-22 03:30:03       91 阅读

热门阅读

  1. SpringCloud整合ElasticSearch搜索使用

    2024-04-22 03:30:03       34 阅读
  2. RocketMQ的设计理念和目标

    2024-04-22 03:30:03       35 阅读
  3. 数字滤波器的设计

    2024-04-22 03:30:03       32 阅读