用设计模式实现三个接口分别查询一个不同字段,但是使用同一个查询语句
时间: 2024-02-20 11:58:40 浏览: 31
可以使用策略模式来实现这个需求。首先定义一个上下文类,该类持有一个查询策略的引用,根据不同的查询接口选择不同的策略来查询数据。每个查询策略实现同一个查询方法,但是查询的字段不同。在上下文类中,调用对应策略的查询方法,最终返回查询结果。
具体实现可以参考以下代码示例:
```java
public interface QueryStrategy {
List<Object> query();
}
public class QueryStrategy1 implements QueryStrategy {
@Override
public List<Object> query() {
// 执行查询语句,查询字段1
// ...
return new ArrayList<>();
}
}
public class QueryStrategy2 implements QueryStrategy {
@Override
public List<Object> query() {
// 执行查询语句,查询字段2
// ...
return new ArrayList<>();
}
}
public class QueryStrategy3 implements QueryStrategy {
@Override
public List<Object> query() {
// 执行查询语句,查询字段3
// ...
return new ArrayList<>();
}
}
public class QueryContext {
private QueryStrategy queryStrategy;
public QueryContext(QueryStrategy queryStrategy) {
this.queryStrategy = queryStrategy;
}
public void setQueryStrategy(QueryStrategy queryStrategy) {
this.queryStrategy = queryStrategy;
}
public List<Object> query() {
// 调用对应策略的查询方法
return queryStrategy.query();
}
}
```
在这个示例中,QueryStrategy 定义了查询策略的接口,三个具体的策略类分别实现了该接口,并实现了不同的查询方法。QueryContext 类持有一个查询策略的引用,在 query() 方法中调用对应策略的查询方法并返回结果。在使用时,可以通过 setQueryStrategy() 方法设置不同的查询策略,来查询不同的字段。
例如,查询字段1的示例代码如下:
```java
QueryContext queryContext = new QueryContext(new QueryStrategy1());
List<Object> result = queryContext.query();
```
查询字段2和字段3的代码类似,只需要设置不同的查询策略即可。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)