Java重构目标类_在java中将类方法重构为接口

在报告模块中,有一个我想要重构的电子邮件服务,因此我可以将其用作通用电子邮件服务 . 实际上,我需要在用户重置密码时向用户发送电子邮件,这是重构的主要原因 .

public class EmailService{

public Email buildEmail(ReportRequest reportRequest){

//build email using ReportRequest object here

}

}

@Builder

@Getter

@Setter

@AllArgsConstructor

public class Email implements Serializable {

private String subject;

private String text;

private String recipientEmail;

private String senderEmail;

}

我重构的方式是这样的:

我创建了一个名为EmailService的接口,它有一个buildEmail()方法 . 我在想,实现这一目标的任何一个类都有不同的构建/构建其电子邮件的方式 .

public interface EmailService{

public Email buildEmail();

}

public class ReportEmailService implements EmailService{

public Email buildEmail(){}

}

public class PasswordEmailService implements EmailService{

public Email buildEmail(){}

}

我现在的问题是,由于构建电子邮件将使用不同的对象(例如ReportRequest或其他对象,如AccountInfo),将所需对象传递到buildEmail()的最佳方法是什么?

我在这里做的是创建另一个方法并为buildEmail()中使用的所需对象创建一个类变量 .

基本上,现在它看起来像这样:

public class ReportEmailService implements EmailService{

private ReportRequest reportRequest;

public void sendEmail(ReportRequest reportRequest){

this.reportRequest = reportRequest;

Email email = buildEmail();

}

public Email buildEmail(){

#build email now using the report request object.

}

}

public class PasswordResetEmailService implements EmailService{

private AccountInfo accountInfo;

public void sendEmail(AccountInfo accountInfo){

this.accountInfo= accountInfo;

Email email = buildEmail();

}

public Email buildEmail(){

#build email now using the account info object.

}

}

我觉得我的做法有点尴尬 . 我可能在设计模式和重构方面错过了一些基本的东西,那么重构这个可能是最好的方法呢?或者buildEmail()如何能够访问构建电子邮件时所需的特定对象 .

好的,以下是用 Java 重构的 Excel 工具: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtil { public static List<List<String>> readExcel(String filePath) throws IOException { String ext = getFileExtension(filePath); if (".xlsx".equals(ext)) { return readXlsx(filePath); } else if (".xls".equals(ext)) { return readXls(filePath); } else { throw new IllegalArgumentException("Unsupported file format"); } } public static void writeExcel(List<List<String>> data, String filePath) throws IOException { String ext = getFileExtension(filePath); if (".xlsx".equals(ext)) { writeXlsx(data, filePath); } else if (".xls".equals(ext)) { writeXls(data, filePath); } else { throw new IllegalArgumentException("Unsupported file format"); } } private static List<List<String>> readXlsx(String filePath) throws IOException { XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filePath)); Sheet sheet = workbook.getSheetAt(0); List<String> headers = new ArrayList<>(); List<List<String>> rows = new ArrayList<>(); for (Row row : sheet) { List<String> rowData = new ArrayList<>(); for (Cell cell : row) { if (row.getRowNum() == 0) { headers.add(cell.getStringCellValue()); } else { switch (cell.getCellType()) { case STRING: rowData.add(cell.getStringCellValue()); break; case NUMERIC: rowData.add(String.valueOf(cell.getNumericCellValue())); break; case BOOLEAN: rowData.add(String.valueOf(cell.getBooleanCellValue())); break; default: rowData.add(""); break; } } } if (row.getRowNum() > 0) { rows.add(rowData); } } workbook.close(); List<List<String>> result = new ArrayList<>(); result.add(headers); result.addAll(rows); return result; } private static List<List<String>> readXls(String filePath) throws IOException { HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filePath)); Sheet sheet = workbook.getSheetAt(0); List<String> headers = new ArrayList<>(); List<List<String>> rows = new ArrayList<>(); for (Row row : sheet) { List<String> rowData = new ArrayList<>(); for (Cell cell : row) { if (row.getRowNum() == 0) { headers.add(cell.getStringCellValue()); } else { switch (cell.getCellType()) { case STRING: rowData.add(cell.getStringCellValue()); break; case NUMERIC: rowData.add(String.valueOf(cell.getNumericCellValue())); break; case BOOLEAN: rowData.add(String.valueOf(cell.getBooleanCellValue())); break; default: rowData.add(""); break; } } } if (row.getRowNum() > 0) { rows.add(rowData); } } workbook.close(); List<List<String>> result = new ArrayList<>(); result.add(headers); result.addAll(rows); return result; } private static void writeXlsx(List<List<String>> data, String filePath) throws IOException { XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(); int rownum = 0; for (List<String> row : data) { Row rowObj = sheet.createRow(rownum++); int cellnum = 0; for (String cell : row) { Cell cellObj = rowObj.createCell(cellnum++); cellObj.setCellValue(cell); } } FileOutputStream out = new FileOutputStream(new File(filePath)); workbook.write(out); out.close(); workbook.close(); } private static void writeXls(List<List<String>> data, String filePath) throws IOException { HSSFWorkbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet(); int rownum = 0; for (List<String> row : data) { Row rowObj = sheet.createRow(rownum++); int cellnum = 0; for (String cell : row) { Cell cellObj = rowObj.createCell(cellnum++); cellObj.setCellValue(cell); } } FileOutputStream out = new FileOutputStream(new File(filePath)); workbook.write(out); out.close(); workbook.close(); } private static String getFileExtension(String filePath) { int dotIndex = filePath.lastIndexOf('.'); if (dotIndex == -1 || dotIndex == 0) { return ""; } else { return filePath.substring(dotIndex).toLowerCase(); } } } ``` 这个工具包含两个静态方法 `readExcel` 和 `writeExcel`,分别用于读取 Excel 文件和写入 Excel 文件。在读取文件时,根据文件后缀名的不同,分别调用 `readXlsx` 和 `readXls` 方法来处理 XLSX 格式和 XLS 格式的文件。在写入文件时,也根据文件后缀名的不同,分别调用 `writeXlsx` 和 `writeXls` 方法来处理。 其中,`readXlsx` 和 `readXls` 方法分别使用 `poi-ooxml` 和 `poi` 库来读取 XLSX 格式和 XLS 格式的文件。`writeXlsx` 和 `writeXls` 方法分别使用 `poi-ooxml` 和 `poi` 库来写入 XLSX 格式和 XLS 格式的文件。 在读取文件时,我们将文件中的表头和数据分别保存在了 `headers` 和 `rows` 中,并在方法的返回值中将它们一起返回,方便后续的处理。在写入文件时,我们使用 `Row` 和 `Cell` 对象来创建表格,并将数据写入其中。同时,在写入文件前,我们需要创建一个 `FileOutputStream` 对象,用于将数据写入到文件中。 在这个工具中,我们还使用了 `getFileExtension` 方法来获取文件后缀名,以便根据不同的文件格式来选择合适的读写方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值