我正在尝试使用的库有一个通用的抽象类,它有两个实现基类的子类。我想编写一个类,它将根据构造函数参数的参数类型自动创建其中一个子节点的实例。
unigram.wfreq
现在我想包装两个具体的子节点,以便包装器/工厂根据参数类型类自动决定调用/实例化哪一个,类似这样(我得到各种编译器错误)
public abstract class JsonRequest<T> {
public JsonRequest(String body, Listener<T> listener) {}
}
public class JsonArrayRequest extends JsonRequest<JSONArray> {
public JsonArrayRequest(JSONArray body, Listener<JSONArray>) {}
}
public class JsonObjectRequest extends JsonRequest<JSONObject> {
public JsonObjectRequest(JSONObject body, Listener<JSONObject>) {}
}
public class RequestFactory<T> {
private Listener<T> mListener;
public RequestFactory(T body, Listener<T> lis) {
mListener = lis;
if (body instanceof JSONArray) {
// Call JsonArrayRequest constructor
JsonArrayRequest(body, mListener);
}
else if (body instanceof JSONObject) {
// Call JsonObjectRequest constructor
JsonObjectRequest(body, mListener);
}
}
}
和JsonArrayRequest
,以便根据传递的JsonObjectRequest
参数的类型自动调用它们的构造函数?(我实际上是在尝试使用Android's Volley library)
答案 0 :(得分:1)
您正在寻找Abstract Factory Design Pattern
public interface RequestFactory<T> {
public JsonRequest<T> create(T body, Listener<T> listener);
}
public class ArrayRequestFactory implements RequestFactory<JSONArray> {
@Override
public JsonArrayRequest create(JSONArray body, Listener<JSONArray> listener) {
return new JsonArrayRequest(body, listener);
}
}
public class ObjectRequestFactory implements RequestFactory<JSONObject> {
@Override
public JsonObjectRequest create(JSONObject body, Listener<JSONObject> listener) {
return new JsonObjectRequest(body, listener);
}
}
通过动态调度选择构造函数,而不是if
条件。