Tôi đang viết lại một số mã và tôi đã quyết định tạo lại lớp, vì có số tờ cố định, tôi đang tạo chúng dưới dạng enums . Đây là một quyết định dựa trên khả năng đọc của một nhà xây dựng patter vs một constructor telescoping.Tôi có thể sử dụng mẫu trình xây dựng trên Java Enum
Mã tôi lấy một số tệp .xls, thêm tiêu đề (và đọc một số từ các tệp .xls khác) và có lẽ một số trang phụ. Sau đó nó kết hợp một loạt các trang tính này lại với nhau theo một cách cụ thể để tạo các tab trên sổ làm việc chính của excel. Vấn đề của tôi là một số tab sổ làm việc có số lượng trang tính khác nhau là các đối số. Tôi đang cố gắng áp dụng các mô hình xây dựng. Đây là loại mã Tôi đang cố gắng để viết:
public enum workBookSheet {
mySheet1("Name1","mainSheet1.xls",true,1).addSubSheet("pathToSubSheet1.xls"),
mySheet2("Name2","mainSheet2.xls",true,2).addHeaderSheet("pathToHeaders.xls").addSubsheet("pathtoSubSheet2.xls");
private String tabName;
private String mainSheetName;
private Boolean available;
private Integer order;
private String subSheetName;
private String headerSheetName;
private workBookSheet(String tabName, String mainSheetName, Boolean available, Integer order){
this.tabName = tabName;
this.mainSheetName = mainSheetName;
this.available = available;
this.order = order;
}
public workBookSheet addSubSheet(String subSheetName){
this.subSheetName = subSheetName;
return this;
}
public workBookSheet addHeaderSheet(String headerSheetName){
this.headerSheetName = headerSheetName;
return this;
}
}
Các lỗi mà java là đem lại cho tôi dường như được nói rằng Java hy vọng khai enum của tôi (dấu phẩy phân cách danh sách các 'nhà xây dựng enum' ở đầu trang) để chỉ có hàm tạo trong đó, chứ không phải phương thức bổ sung. Tôi có thể di chuyển các phương pháp đó sang phương pháp 'người xây dựng' bên dưới, mà không cần khiếu nại.
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
Đây có phải là cách duy nhất để triển khai mẫu xây dựng trên nền tảng không? Nó đòi hỏi tôi phải chạy một phương pháp riêng biệt, mà không phải là quá nhiều rắc rối. Tôi cảm thấy như tôi đang phá vỡ mô hình mặc dù (tôi đoán, không phải là một điều xấu nếu điều này hoạt động.)
NB Tôi đã có một cái nhìn tốt để xem nếu có ai khác đã hỏi câu hỏi này, trên SO hoặc ở nơi khác trên web. Gần nhất tôi tìm thấy là một câu hỏi ở đây trên Enums và Nhà máy, nhưng điều đó không hoàn toàn trả lời câu hỏi của tôi. Ngoài ra tôi nhận thức được điều này không hoàn toàn là mô hình xây dựng, vì tôi không có một lớp riêng biệt mà sau đó chấp nhận một phương thức build() tạo ra một enum mới. Tôi đoán đây là gốc của vấn đề trong thiết kế ban đầu của tôi, nhưng tôi tương đối mới với Java.
Vì vậy, có cách nào tốt hơn để sử dụng mẫu xây dựng trên Java enum? Hoặc là những gì tôi có 'đủ gần'?
Đây có phải là thứ bạn đã sử dụng trước đây hay là mã mới này bạn đã viết làm ví dụ? – Pureferret
Một chút của cả hai. Tôi muốn sử dụng một người xây dựng, tìm thấy một vài câu trả lời nhưng không thích họ, và đã làm theo cách này. Sau đó, tôi figured tôi chia sẻ giải pháp của tôi trong câu hỏi này trong trường hợp nó đã giúp một ai đó. –
Cảm ơn bạn rất nhiều! Điều này làm cho lớp enum của tôi dễ đọc hơn nhiều. –