当前位置: 首页 > article >正文

【无标题】JAVA策略模式代码例子

在Java中,您可以使用面向对象编程中的继承和多态性来实现您的需求。首先,我们定义一个`Good`类,该类包含满减策略和打折策略。然后,我们可以让`Shoe`类和`Cloth`类继承自`Good`类。为了实现不同的折扣或满减策略,可以考虑使用策略模式。

 

下面是一个简单的实现示例:

 

### 1. 定义策略接口

 

首先,我们需要定义一个策略接口,该接口可以被不同的具体策略实现。

 

```java

public interface DiscountStrategy {

    double applyDiscount(double originalPrice);

}

```

 

### 2. 实现具体的策略

 

接下来,我们实现几个具体的策略,例如满减和打折。

 

```java

public class FullReductionStrategy implements DiscountStrategy {

    private double threshold;

    private double reduction;

 

    public FullReductionStrategy(double threshold, double reduction) {

        this.threshold = threshold;

        this.reduction = reduction;

    }

 

    @Override

    public double applyDiscount(double originalPrice) {

        return originalPrice >= threshold ? originalPrice - reduction : originalPrice;

    }

}

 

public class PercentageDiscountStrategy implements DiscountStrategy {

    private double discountRate;

 

    public PercentageDiscountStrategy(double discountRate) {

        this.discountRate = discountRate;

    }

 

    @Override

    public double applyDiscount(double originalPrice) {

        return originalPrice * (1 - discountRate);

    }

}

```

 

### 3. 定义商品基类

 

现在,我们定义`Good`类,并给它添加一个`DiscountStrategy`类型的字段,以及应用折扣的方法。

 

```java

public abstract class Good {

    protected String name;

    protected double price;

    protected DiscountStrategy discountStrategy;

 

    public Good(String name, double price, DiscountStrategy discountStrategy) {

        this.name = name;

        this.price = price;

        this.discountStrategy = discountStrategy;

    }

 

    public double getPriceAfterDiscount() {

        return discountStrategy.applyDiscount(price);

    }

 

    // Getters and Setters

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public double getPrice() {

        return price;

    }

 

    public void setPrice(double price) {

        this.price = price;

    }

 

    public DiscountStrategy getDiscountStrategy() {

        return discountStrategy;

    }

 

    public void setDiscountStrategy(DiscountStrategy discountStrategy) {

        this.discountStrategy = discountStrategy;

    }

}

```

 

### 4. 创建子类

 

最后,创建`Shoe`和`Cloth`类,它们都继承自`Good`类。

 

```java

public class Shoe extends Good {

    public Shoe(String name, double price, DiscountStrategy discountStrategy) {

        super(name, price, discountStrategy);

    }

}

 

public class Cloth extends Good {

    public Cloth(String name, double price, DiscountStrategy discountStrategy) {

        super(name, price, discountStrategy);

    }

}

```

 

### 5. 使用示例

 

下面是如何使用这些类的一个简单示例:

 

```java

public class Main {

    public static void main(String[] args) {

        DiscountStrategy shoeDiscount = new PercentageDiscountStrategy(0.1); // 10% off

        DiscountStrategy clothDiscount = new FullReductionStrategy(100, 20); // 满100减20

 

        Shoe shoe = new Shoe("Running Shoe", 150, shoeDiscount);

        Cloth cloth = new Cloth("T-shirt", 80, clothDiscount);

 

        System.out.println("Shoe Price After Discount: " + shoe.getPriceAfterDiscount());

        System.out.println("Cloth Price After Discount: " + cloth.getPriceAfterDiscount());

    }

}

```

 

这段代码展示了如何通过策略模式灵活地为不同种类的商品设置不同的折扣策略。希望这能帮助您解决问题!如果有任何其他问题或需要进一步的帮助,请随时告诉我。


http://www.kler.cn/a/416751.html

相关文章:

  • 使用YOLOv3进行实时活体检测:Python与OpenCV实现
  • 微软企业邮箱:安全可靠的企业级邮件服务!
  • C语言进阶7:程序环境与预处理
  • JAVA项目-------医院挂号系统
  • 群控系统服务端开发模式-应用开发-邮箱配置功能开发
  • 使用docker搭建hysteria2服务端
  • Spark和MapReduce场景应用和区别
  • vue3----API
  • JavaFx -- chapter09(网络扫描程序)
  • static
  • MongoDB集群分片安装部署手册
  • Spring Web MVC其他扩展(详解下)
  • Transformer 模型:序列数据处理的自注意力神经网络架构
  • Scala入门基础(20)数据集复习拓展
  • CEF127 编译指南 Linux篇 - 编译CEF(六)
  • 什么是内存对齐?为什么需要内存对齐?
  • 《实战OpenCV系列》专栏介绍
  • 针对解决conda环境BUG的个人笔记
  • C语言——指针初阶(三)
  • 【前端开发】微信裁剪图片上传
  • arp代理功能
  • Windows常用DOS指令(附案例)
  • 力扣--LCR 144.翻转二叉树
  • 新手参加CTF大赛——Web题目的基本解题流程
  • 5. langgraph实现高级RAG (Adaptive RAG)
  • 0018. shell命令--nl