Tôi đã cố gắng tìm ra cách để gắn thẻ một số phương thức từ lớp cơ sở của mình để lớp khách hàng có thể gọi chúng theo thẻ. Đoạn mã ví dụ là:phương pháp gắn thẻ và gọi chúng từ đối tượng khách hàng theo thẻ
public class Base {
public void method1(){
..change state of base class
}
public void method2(){
..change state of base class
}
public void method3(){
..change state of base class
}
}
Một lớp khách hàng từ một phương pháp main() sẽ gọi mỗi phương pháp của cơ sở thông qua một chuỗi lệnh ngẫu nhiên:
public static void main(String[] args) {
String sequence = "ABCAABBBABACCACC"
Base aBase = new Base();
for (int i = 0; i < sequence.length(); i++){
char temp = sequence.charAt(i);
switch(temp){
case 'A':{aBase.method1(); break;}
case 'B':{aBase.method2(); break;}
case 'C':{aBase.method3(); break;} }
}
System.out.println(aBase.getState());
}
Bây giờ tôi muốn thoát khỏi câu lệnh switch hoàn toàn từ đối tượng Client. Tôi biết kỹ thuật này để thay thế chuyển đổi bằng đa hình, nhưng muốn tránh tạo một tập hợp các lớp mới. Tôi đã hy vọng chỉ đơn giản là lưu trữ những phương pháp đó trong một cấu trúc dữ liệu thích hợp và bằng cách nào đó gắn thẻ chúng với một nhân vật phù hợp từ trình tự.
Bản đồ có thể dễ dàng lưu trữ các đối tượng với cặp giá trị/khóa có thể thực hiện công việc, (như tôi đã làm here) hoặc mẫu lệnh, nhưng vì tôi không muốn thay thế các phương thức đó bằng các đối tượng. cách khác nhau có lẽ, để lưu trữ các phương pháp và có một khách hàng chọn lọc gọi cho họ?
Bất cứ lời khuyên được đánh giá cao
@skaffman: Cảm ơn bạn đã xây dựng, vẻ ngoài của nó khá gọn gàng và thẳng thắn – denchr
+1 cho giải pháp đơn giản nhất, mặc dù tôi vẫn nghĩ rằng bỏ qua chi phí phản chiếu và sử dụng mẫu lệnh * sẽ thích hợp hơn. –
Có thể, nhưng tôi nghi ngờ điều đó. Reflection overhead là khá nhỏ những ngày này, và chắc chắn là đủ nhanh cho khá nhiều mọi khuôn khổ java ra khỏi đó. – skaffman