【无标题】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());

}

}

```

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

相关推荐
带刺的坐椅6 分钟前
qwen3 惊喜发布,用 ollama + solon ai (java) 尝个鲜
java·spring·solon·solon-ai·qwen3
.生产的驴40 分钟前
SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换
java·开发语言·spring boot·后端·前端框架
Howard_Stark44 分钟前
Spring的BeanFactory和FactoryBean的区别
java·后端·spring
饮长安千年月44 分钟前
学生管理系统审计
java·网络安全·代码审计
-曾牛1 小时前
Spring Boot中@RequestParam、@RequestBody、@PathVariable的区别与使用
java·spring boot·后端·intellij-idea·注解·spring boot 注解·混淆用法
新时代苦力工1 小时前
处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
java·数据结构·list
niesiyuan0001 小时前
MAC如何安装多版本jdk(以8,11,17为例)
java
zcyf08092 小时前
kafka理论学习汇总
java·分布式·学习·kafka
再拼一次吧2 小时前
Spring进阶篇
java·后端·spring
爱编程的小庄2 小时前
Maven 4.0.0 模式-pom.xml配置详解
xml·java·maven