0
我有一个类RabbitQueue它基本上就像一个队列,并实现我的Polbly接口。Java泛型软件工程设计
我也有一类SaveToDatabaseStrategy它实现了我的DataProcessingStrategy接口。这是根据战略模式设计的。
现在,我的InputHandler类实现了我的接口InputListener,它包含一个Pollable接口实例和一个DataProcessingStrategy接口。
但是,我不想在声明这两个字段时设置泛型类型(字符串),因为泛型类型取决于稍后给出的此接口的实现。
您会如何设计?
public interface Pollable<T> {
T poll();
}
public class RabbitQueue implements Pollable<String> {
// code..
}
public interface DataProcessingStrategy<T> {
void processData(T t);
}
public class SaveToDatabaseStrategy<T> implements DataProcessingStrategy<T> {
private Repository<T, ?> repo;
public SaveToDatabaseStrategy(Repository<T, ?> repo) {
this.repo = repo;
}
@Override
public void processData(T data) {
repo.create(data);
System.out.printf("Received data of type %s: %s\n", data.getClass().getSimpleName(), data);
}
}
public interface InputListener<T> {
void inputReceived();
void inputReceived(T t);
}
public class InputHandler implements InputListener<String> {
private Pollable<String> queue;
private DataProcessingStrategy<String> strategy;
public InputHandler(String host, String queueName) throws IOException, TimeoutException {
queue = new RabbitQueue(host, queueName, this);
}
public void setStrategy(DataProcessingStrategy strategy) {
this.strategy = strategy;
}
@Override
public void inputReceived() {
System.out.println("Input received!");
strategy.processData(queue.poll());
}
@Override
public void inputReceived(String s) {
System.out.println("Input received: " + s + "!");
System.out.println("> " + queue.poll());
}
}