for (Record record:container){ if (record.getType().equalsIgnoreCase("PTR")){ //TODO } if (record.getType().equalsIgnoreCase("PRR")){ //TODO } }//现有java需求将for循环中if解偶,需要用装饰者模式的思想。初始化超类就ok 可以让子类全部进入执行,并将返回结果方法哦List中,统一调用sava方法操作
时间: 2024-02-14 11:09:01 浏览: 70
好的,我理解你的需求是将循环中的 if 语句解耦,使用装饰者模式来实现,并将子类的执行结果保存在 List 中,最后统一调用 save 方法进行操作。那么我来给你讲解一下如何实现。
首先,我们需要定义一个超类,用于保存子类的执行结果:
```java
public abstract class RecordDecorator {
protected List<Record> records = new ArrayList<>();
public abstract void execute(Record record);
public List<Record> getRecords() {
return records;
}
}
```
在该超类中,我们定义了一个 List 类型的成员变量 `records`,用于保存子类的执行结果。同时,我们定义了一个抽象方法 `execute`,用于子类的具体执行操作。
接着,我们需要定义两个子类,分别对应原来的两个 if 语句:
```java
public class PTRRecordDecorator extends RecordDecorator {
@Override
public void execute(Record record) {
if (record.getType().equalsIgnoreCase("PTR")) {
records.add(record);
}
}
}
public class PRRRecordDecorator extends RecordDecorator {
@Override
public void execute(Record record) {
if (record.getType().equalsIgnoreCase("PRR")) {
records.add(record);
}
}
}
```
在这两个子类中,我们重写了超类的 `execute` 方法,对应原来的两个 if 语句,将符合条件的记录添加到成员变量 `records` 中。
最后,我们需要使用装饰者模式来解耦原来的循环中的 if 语句:
```java
RecordDecorator ptrDecorator = new PTRRecordDecorator();
RecordDecorator prrDecorator = new PRRRecordDecorator();
for (Record record : container) {
ptrDecorator.execute(record);
prrDecorator.execute(record);
}
List<Record> ptrRecords = ptrDecorator.getRecords();
List<Record> prrRecords = prrDecorator.getRecords();
save(ptrRecords);
save(prrRecords);
```
在主函数中,我们创建了两个子类的实例,分别对应原来的两个 if 语句。然后在循环中,我们通过调用 `execute` 方法,将每个记录交给两个子类处理。最后,我们通过调用 `getRecords` 方法,获取子类处理后的结果,并分别调用 `save` 方法进行操作。
这样,我们就使用装饰者模式,将原来的循环中的 if 语句解耦,同时将子类的执行结果保存在 List 中,最后统一进行操作。
阅读全文