java 反射实现 工厂模式_java – 用反射实现工厂模式
我正在實施工廠模式這是我的工廠類:
class ProductFactory
{
private HashMap m_RegisteredProducts = new HashMap();
public void registerProduct (String productID, Class productClass)
{
m_RegisteredProducts.put(productID, productClass);
}
public Product createProduct(String productID)
{
Class productClass = (Class)m_RegisteredProducts.get(productID);
Constructor productConstructor = cClass.getDeclaredConstructor(new Class[] { String.class });
return (Product)productConstructor.newInstance(new Object[] { });
}
}
這是我的具體課程:
class OneProduct extends Product
{
static {
Factory.instance().registerProduct("ID1",OneProduct.class);
}
...
}
我的問題:
>如何強制執行所有具體實現來注冊ID及其類對象? – 因為如果班級在工廠里沒有這樣注冊,那么它就無法使用.
>我不能使用一個抽象類,它需要以某種方式將其所有子節點發送給父節點,強制執行此約束嗎?像這樣的東西:
public abstract class Product {
public Product(String name, Class productClass){
}
}
我在這里錯過了什么嗎?
最佳答案 在Java 8中你會寫
class ProductFactory {
private final Map> m_RegisteredProducts =
new HashMap<>();
public ProductFactory registerProduct (String productID,
Function productFactory) {
m_RegisteredProducts.put(productID, productFactory);
return this;
}
public Product createProduct(String productID) {
return m_RegisteredProducts.get(productID).apply(productID);
}
}
注冊
static {
Factory.instance().registerProduct("ID1", OneProduct::new)
.registerProduct("ID2", s -> new OneProduct("my" + s));
.registerProduct("ID3", s -> {
throw new AssertionError("Never create a " + s); });
}
OneProduct :: new與s – >非常相似;新的OneProduct(s)或
new Function() {
public Product apply(String s) {
return new OneProduct(s);
}
}
注意(1):Java 8將確保您具有可見的OneProduct(String)構造函數或無法編譯.
注意(2):Java 7是公共支持終止.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java 反射实现 工厂模式_java – 用反射实现工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二级c语言程序设计翻译,C语言程序设计报
- 下一篇: Git使用手册--超级详细,自己都看哭了