Tôi có một lớp util thực hiện một số công việc. Rõ ràng, nó được đóng để mở rộng và tất cả các phương thức đều tĩnh. Vì lợi ích của sự đơn giản, lớp trông như thế này:Mẫu phương thức mẫu cho các lớp tĩnh
public final class Util {
private Util() { }
public static void doWork() {
// some work
int variable = help();
// some work uses variable
}
private static int help() {
// some helper functionality
}
}
Lớp có phương pháp doWork
mà thực hiện rất nhiều tính toán. Nhân tiện, phương thức gọi phương thức trợ giúp help
để nhận được một số kết quả và phần còn lại của mã sử dụng kết quả được trả về theo phương thức help
.
Bây giờ, trong mã khách hàng Tôi muốn sử dụng lại chức năng của phương pháp doWork
, nhưng thay vì gọi help
Tôi muốn gọi help2
phương pháp. Giải pháp đơn giản nhất chỉ cần tạo phương thức doWork2
thay thế help
thành help2
.
Phương pháp tiếp cận rất xấu, bởi vì mọi thay đổi trong số doWork
cũng phải được sao chép trong doWork2
. Điều này rất giống với mẫu Template Method
, nhưng do thực tế là chúng tôi không có phần mở rộng ở đây, chúng tôi không thể áp dụng nó.
giải pháp tốt nhất mà tôi đã đưa ra để thêm tham số để phương pháp này, nhưng giữ gìn tất cả các người dùng hiện tại của doWork
:
public static void doWork() {
doWorkWithParameter(true);
}
public static void doWorkWithParameter(boolean helpOrHelp2) {
// some work
int variable = helpOrHelp2 ? help() : help2();
// some work uses variable
}
gì được các giải pháp thiết kế tốt hơn có thể được áp dụng để giải quyết vấn đề này? Có cách nào để đạt được sự linh hoạt như Template Pattern
, nhưng trong ứng dụng để sử dụng các lớp học.
Xin cảm ơn trước.
Có bất cứ lý do bạn không sử dụng phương pháp quá tải trong giải pháp của bạn? 'public static void doWork() {...}' 'public static void doWork (boolean param) {...}' – Crazenezz
Hoặc tốt hơn vẫn 'public static void doWork (int variable)'. Mặc dù tôi nghi ngờ câu trả lời thực tế là sự nhầm lẫn là do các thống kê và rằng các đối tượng sẽ cung cấp một câu trả lời rõ ràng hơn - khó nói với các ví dụ trừu tượng mặc dù. –
Điều bạn đang tìm kiếm là Chiến lược mẫu. Kiểm tra câu trả lời của Arnaldo. –