首先來寫乙個傳統的工廠:
inte***ce
ifruit
class
implements
ifruit
}class
orange
implements
ifruit
}class
factory
@suppresswarnings("unchecked")
public
static ifruit getinstance(string classname)else
if("orange".equals(classname))
return
null;
} }public
class
test30
}
如上述例子,利用傳入的類名來得到相應的例項化物件,但這裡是有廠類進行改造,例如個很重的問題:如果ifruit有十個乃至上百個實現類,我們就需要對工廠進行改造,例如上述例子中的orange。有多少個實現類就需要新多少物件,這在實際開發中是不現實的。
我們可以用反射來解決這個問題。
inte***ce
ifruit
inte***ce
imessage
class
implements
ifruit
}class
messageimpl
implements
imessage
}class
factory
@suppresswarnings("unchecked")
public
static
t getinstance(string classname) catch (instantiationexception | illegalacces***ception | classnotfoundexception e)
return obj;
} }public
class
test29
}
如上述**,可以通過傳入類名來動態的例項化物件,而不需要再加**,還可以加入泛型來實現多個介面或抽象類的例項化。 java反射機制 工廠設計模式的進化
一 基本使用和 簡單工廠模式 使用步驟 1 建立抽象產品類 定義具體產品的公共介面 2 建立具體產品類 繼承抽象產品類 定義生產的具體產品 3 建立工廠類,根據傳入不同引數從而建立不同具體產品類的例項 4 外界通過呼叫工廠類的方法,傳入不同引數從而建立不同具體產品類的例項public class d...
php 工廠模式 反射機制
class classarr param type 類庫 param classs 工廠庫 param array param 引數 param bool needinstance return object throws reflectionexception 如果工廠模式方法是靜態的那麼就直接返...
設計模式之用反射機制改進的抽象工廠
有關三種工廠模式的知識,請看我這篇博文 我們直接來看乙個抽象工廠的demo 1.抽象產品類 資料庫增刪改用到的 user表 department表 public inte ce iuser public inte ce idepartment 2.實體產品類這裡考慮的兩種不同的資料庫,sqlserv...