Tôi đang làm việc với một mã UI nơi tôi có một Action
lớp, đại loại như thế này -
public class MyAction extends Action {
public MyAction() {
setText("My Action Text");
setToolTip("My Action Tool tip");
setImage("Some Image");
}
}
Khi lớp Hành động này được tạo, có khá nhiều giả định rằng Action
lớp sẽ không thể tùy chỉnh (theo một nghĩa nào đó - văn bản, chú giải công cụ hoặc hình ảnh của nó sẽ không bị thay đổi ở bất kỳ đâu trong mã). Bây giờ, chúng tôi cần thay đổi văn bản hành động tại một số vị trí trong mã. Vì vậy, tôi đã đề nghị đồng nghiệp của mình xóa văn bản hành động được mã hóa cứng khỏi hàm tạo và chấp nhận nó làm đối số, để mọi người buộc phải truyền văn bản hành động. Một cái gì đó giống như mã này dưới đây -
public class MyAction extends Action {
public MyAction(String actionText) {
setText(actionText);
setTooltip("My Action tool tip");
setImage("My Image");
}
}
Tuy nhiên, ông nghĩ rằng vì setText()
phương thức thuộc về lớp cơ sở nên nó có thể được sử dụng linh hoạt để truyền văn bản hành động bất cứ nơi nào thể hiện hành động được tạo. Theo cách đó, không cần phải thay đổi MyAction
lớp hiện có . Vì vậy, mã của anh ấy sẽ trông giống như thế này.
MyAction action = new MyAction(); //this creates action instance with the hardcoded text
action.setText("User required new action text"); //overwrite the existing text.
Tôi không chắc chắn nếu đó là một cách chính xác để đối phó với vấn đề. Tôi nghĩ rằng trong trường hợp người dùng đã đề cập ở trên dù sao cũng sẽ thay đổi văn bản, vậy tại sao không ép buộc anh ta trong khi xây dựng hành động? Lợi ích duy nhất tôi thấy với mã gốc là người dùng có thể tạo lớp Hành động mà không cần suy nghĩ nhiều về việc thiết lập văn bản.