首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java设计模式应用

Java设计模式应用
EN

Stack Overflow用户
提问于 2015-05-28 15:05:02
回答 1查看 104关注 0票数 0

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

RowMappable.java

代码语言:javascript
复制
package com.api.mapper;
import org.apache.poi.ss.usermodel.Row;
public interface RowMappable<T> {
  T mapRow(Row row);
}

Issue.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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用户)造成混乱。所以我用内部类的概念实现了它。

这样做对吗?是否有更好的方法来实现同样的目标?

这里有适用的design pattern吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 15:14:53

创建一个类,比如RowMappableImpl(在您的例子中是InnerSimpleExcelIssueMapper),实现RowMappable并实现返回Issue实例的方法mapRow()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30510332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档