java设计模式要求告诉我是什么设计模式还有设计思路:商品查询:录入若干商品然后根据输入商品名称关键字,或者根据商品价格范围等,查询商品,如有符合条件的商品则显示,否则提示没有查询到
时间: 2023-10-23 11:09:38 浏览: 47
这个问题可以使用策略模式进行解决。
设计思路:
1. 首先,定义一个商品类(Product)表示商品,它包含商品名称、价格等属性。
2. 然后,定义一个商品查询类(ProductQuery),它包含了查询商品的方法。该类需要接收查询条件,如商品名称关键字、商品价格范围等。
3. 接着,定义一个策略接口(SearchStrategy),它包含了一个搜索方法(search),用于实现不同的搜索策略。
4. 实现不同的策略类,如按商品名称关键字搜索的策略类(NameSearchStrategy)、按商品价格范围搜索的策略类(PriceSearchStrategy)等。这些策略类需要实现 SearchStrategy 接口,并实现 search 方法。
5. 在 ProductQuery 类中,使用策略模式来选择不同的搜索策略,根据用户输入的条件进行查询。
代码示例:
Product.java
```
public class Product {
private String name;
private double price;
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;
}
}
```
SearchStrategy.java
```
public interface SearchStrategy {
List<Product> search(List<Product> productList, Object condition);
}
```
NameSearchStrategy.java
```
public class NameSearchStrategy implements SearchStrategy {
@Override
public List<Product> search(List<Product> productList, Object condition) {
String keyword = (String) condition;
List<Product> result = new ArrayList<>();
for (Product product : productList) {
if (product.getName().contains(keyword)) {
result.add(product);
}
}
return result;
}
}
```
PriceSearchStrategy.java
```
public class PriceSearchStrategy implements SearchStrategy {
@Override
public List<Product> search(List<Product> productList, Object condition) {
double[] priceRange = (double[]) condition;
List<Product> result = new ArrayList<>();
for (Product product : productList) {
if (product.getPrice() >= priceRange[0] && product.getPrice() <= priceRange[1]) {
result.add(product);
}
}
return result;
}
}
```
ProductQuery.java
```
public class ProductQuery {
private List<Product> productList;
public ProductQuery(List<Product> productList) {
this.productList = productList;
}
public List<Product> query(SearchStrategy strategy, Object condition) {
return strategy.search(productList, condition);
}
}
```
使用示例:
```
public static void main(String[] args) {
List<Product> productList = new ArrayList<>();
// 添加商品到 productList 中
ProductQuery query = new ProductQuery(productList);
// 按商品名称关键字搜索
List<Product> result1 = query.query(new NameSearchStrategy(), "手机");
System.out.println("按商品名称关键字搜索结果:");
for (Product product : result1) {
System.out.println(product.getName() + " " + product.getPrice());
}
// 按商品价格范围搜索
List<Product> result2 = query.query(new PriceSearchStrategy(), new double[]{1000, 2000});
System.out.println("按商品价格范围搜索结果:");
for (Product product : result2) {
System.out.println(product.getName() + " " + product.getPrice());
}
}
```
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)