[英]Change class type at runtime
我有兩個類(讓我們稱之為A
和B
),都繼承自一個公共超類( C
)。
假設我需要構建一個C
List
。 我的問題是,根據C
的構造函數收到的數據,我需要在列表中放置一個A
或B
對象。
有沒有辦法從C
的構造函數中執行此操作? 或者,或者,我該如何解決這個問題?
這聽起來像是一個使用工廠模式的好地方。 基本上,使用返回類型為C的靜態方法創建一個類CFactory。然后,該方法可以決定創建A或B並返回該值。
這稱為工廠模式。
工廠模式:簡單來說,如果我們有一個超類和n個子類,並且基於提供的數據,我們必須返回其中一個子類的對象,我們使用工廠模式。
您的實現將類似於:
public class C {
//methods
}// End of class
public class A extends C {
//methods
}// End of class
public class B extends C {
//methods
}// End of class
public class CFactory {
public static void main(String args[]) {
CFactory factory = new CFactory();
factory.getObjects(args[0]);
}
public C getObjects(String type) {
if (type.equals("A"))
return new A();
else if(type.equals("B"))
return new B();
else
return null;
}
}// End of class
結帳示例:
http://www.allapplabs.com/java_design_patterns/factory_pattern.htm
C的構造函數無法做到這一點。 您可以在C中創建一個工廠方法,根據收到的數據創建A或B:
class C {
public final static C newInstance(Object data) {
if (inspect(data)) {
return new A(data);
}
return new B(data);
}
}
你為什么需要從C的構造函數中做到這一點? 移動任何邏輯確定要將哪個類型實例化到其他地方,然后在那里創建具體類型?
抽象工廠方法應該幫助您決定使用哪個C實現
public abstract class CFactory{
public abstract C createCObject(data...){
if (something) {
return new A();
}else{
return new B();
}
}
}
然后你可以使用抽象工廠方法構建List ...
希望這有助於......
不能。您無法從C的構造函數創建A或B對象。
您可以使用C中的靜態方法創建A或B.或者,您可以創建一些工作類來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.