[英]Why do I need a FactorySupplier?
在我正在處理的項目中(不是我的項目,只是在處理它),有很多這樣的結構:
project.priv.logic.MyServiceImpl.java
project.priv.service.MyServiceFactoryImpl.java
project.pub.logic.MyServiceIF.java
project.pub.service.MyServiceFactoryIF.java
project.pub.service.MyServiceFactorySupplier.java
服務的調用方式如下:
MyServiceFactorySupplier.getMyServiceFactory().getMyService()
據我所知,工廠用來隱藏實施MyServiceImpl
如果位置或內容MyServiceImpl
變化。 但是,為什么我的工廠(供應商)還有另一個工廠? 我認為我的工廠和FactorySupplier更換的可能性大致相等。 另外,我還沒有發現動態創建創建的工廠的一種情況(我認為在抽象工廠模式中就是這種情況),但是只返回MyServiceFactoryImpl.getInstance()
。 實施FactorySupplier是慣例嗎? 有什么好處?
假設您具有實現MyServiceIF
的類的層次結構。
假設您具有匹配的工廠類層次結構,以在原始層次結構中創建每個實例。
在這種情況下, MyServiceFactorySupplier
可以具有可用工廠的注冊表,並且您可以調用getMyServiceFactory(parameter)
,在該參數中,參數確定將實例化哪個工廠(因此將由該工廠創建該類的實例)。
我不知道這是否是您項目中的用例,但這是有效的用例。
這是我的意思的代碼示例:
public class MyServiceImpl implements MyServiceIF
{
....
}
public class MyServiceImpl2 implements MyServiceIF
{
....
}
public class MyServiceFactoryImpl implements MyServiceFactoryIF
{
....
public MyServiceIF getMyService ()
{
return new MyServiceImpl ();
}
....
}
public class MyServiceFactoryImpl2 implements MyServiceFactoryIF
{
....
public MyServiceIF getMyService ()
{
return new MyServiceImpl2 ();
}
....
}
public class MyServiceFactorySupplier
{
....
public static MyServiceFactoryIF getMyServiceFactory()
{
return new MyServiceFactoryImpl (); // default factory
}
public static MyServiceFactoryIF getMyServiceFactory(String type)
{
Class serviceClass = _registry.get(type);
if (serviceClass != null) {
return serviceClass.newInstance ();
} else {
return getMyServiceFactory(); // default factory
}
}
....
}
我有一個由工廠層次結構實例化的相關類層次結構。 雖然我沒有FactorySupplier類,但是在工廠層次結構的基類中有一個靜態方法BaseFactory.getInstance(parameter)
,該方法返回一個依賴於傳遞的參數的工廠實例。
我可以想到幾個例子(有些人為的),這種模式可能有用。 通常,您有兩種或多種服務實現方式,例如
在以上每個示例中,在應用程序啟動時都需要為FactorySupplier
進行初始化,例如,使用語言環境或數據庫類型對FactorySupplier
進行參數設置,並根據這些參數生成相應的工廠。
如果我理解正確,則您的應用程序中沒有任何此類代碼,並且FactorySupplier
始終返回相同類型的工廠。
也許這樣做是為了對尚不需要的可擴展性進行編程,但是恕我直言,這看起來像是在猜測將來某個時候應用程序可能需要什么,而不是有意識地選擇體系結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.