Với Enums, bạn có thể có phương pháp cho mỗi trường hợp.
public enum ActionEnum {
ABC {
@Override
void doSomething() {
System.out.println("Doing something for ABC");
}
},
XYZ {
@Override
void doSomething() {
System.out.println("Doing something for XYZ");
}
};
abstract void doSomething();
}
public class MyActionClass {
public void myMethod(String name) {
ActionEnum.valueOf("ABC").doSomething();
}
}
Nó vẫn còn kinda lộn xộn (enum lớn với hơn 100 mục, thậm chí nó tất cả nó được cử), nhưng có thể tránh mã HashMap khởi (100 puts cũng là lộn xộn theo ý kiến của tôi).
Và thêm một tùy chọn (cho mục đích tài liệu) sẽ được phản ánh:
public interface Action {
void doSomething();
}
public class ABCAction implements Action {
@Override
public void doSomething() {
System.out.println("Doing something for ABC");
}
}
public class MyActionClass {
void doSomethingWithReflection(String name) {
try {
Class<? extends Action> actionClass = Class.
forName("actpck."+ name + "Action").asSubclass(Action.class);
Action a = actionClass.newInstance();
a.doSomething();
} catch (Exception e) {
// TODO Catch exceptions individually and do something useful.
e.printStackTrace();
}
}
}
Mỗi phương pháp đều có đó là sự đánh đổi thương mại:
- HashMap = nhanh + Kinda lộn xộn ("set-up" mã với hàng trăm lượt đặt)
- Enum = Fast + Kinda lộn xộn 2 (tệp lớn).
- Phản ánh = Dễ bị lỗi hơn + lỗi thời gian chạy, nhưng cung cấp sự tách biệt rõ ràng mà không cần phải sử dụng HashMap lớn clunky.
Nguồn
2011-09-08 15:44:51
Các mô hình lệnh là cách để xử lý này cho chắc chắn, xem: http://stackoverflow.com/questions/1199646/long-list-of-if-statements-in-java/1199677#1199677 –
Chính xác điều gì là sai với nó như là, khác hơn là dường như khó chịu? –