gpt4 book ai didi

Java设计模式应用

转载 作者:行者123 更新时间:2023-12-01 11:29:44 27 4
gpt4 key购买 nike

我正在开发一个 API,包含以下代码片段。

RowMappable.java

package com.api.mapper;
import org.apache.poi.ss.usermodel.Row;
public interface RowMappable<T> {
T mapRow(Row row);
}

问题.java

package com.api.pojo;

import org.apache.poi.ss.usermodel.Cell;

/**
* It will contain all the fields related to Issue.
*
* @author vishal.zanzrukia
*
*/
public class Issue {

private Cell description;

/**
* @return
*/
public String getDescription() {
if (description != null) {
return description.getStringCellValue();
}
return null;
}

/**
* @param description
*/
public void setDescription(Cell description) {
this.description = description;
}
}

ExcelColumn.java

package com.api.excel;

import org.apache.poi.ss.usermodel.Row;
import com.api.mapper.SimpleExcelIssueMapper;
import com.api.pojo.Issue;


/**
* @author vishal.zanzrukia
*
*/
public class ExcelColumn {

private int descriptionColumnIndex;

/**
* This is inner class to protect visibility of mapRow method
*
* @author vishal.zanzrukia
*
*/
class InnerSimpleExcelIssueMapper implements RowMappable<Issue> {

@Override
public Issue mapRow(Row row) {
Issue issue = new Issue();
issue.setDescription(row.getCell(descriptionColumnIndex));
return issue;
}
}

/**
* set issue description column index<BR>
* <STRONG>NOTE :</STRONG> index starts from <STRONG>0</STRONG>
*
* @param descriptionColumnIndex
*/
public void setDescriptionColumnIndex(int descriptionColumnIndex) {
this.descriptionColumnIndex = descriptionColumnIndex;
}
}

此处,ExcelColumn 是最终用户(API 用户)将用于将 Excel 列索引与其用途进行映射的类(此处以描述为例)。

现在,ExcelColumn 可以直接实现RowMappable,而不是内部类(InnerSimpleExcelIssueMapper),但是如果我这样做,最终用户(API 用户)将能够调用 mapRow 方法。我不想在包外部调用 mapRow 因为这会给最终用户(API 用户)带来困惑。所以我使用内部类概念实现了它。

这是正确的方法吗?有没有更好的方法来达到同样的目的?

这里有适用的设计模式吗?

最佳答案

创建一个实现 RowMappable 的类 RowMappableImpl(在您的情况下 InnerSimpleExcelIssueMapper)并实现方法 mapRow() 返回一个 Issue 实例。

ExcelColumn 类中,调用在 RowMappableImpl 中实现的 mapRow() 方法。这样 API 的客户端将无法调用 mapRow()

关于Java设计模式应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30510332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com