關於工廠設計模式的問題(反射機制)

2021-08-26 20:52:29 字數 1128 閱讀 6863

首先來寫乙個傳統的工廠:

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...