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());
}
}