2013-02-06 102 views
1
public class ConcreteService1: IService1 
{ 
private IService2 _service2; 
public void doSomething() 
{ 
    _service2 = new ConcreteService2(); 
..... 
} 


} 

public class ConcreateService2: IService2 
{ 
private IService1 _service1; 
public void doSomething() 
{ 
_service1 = new ConcreteService1(); 
..... 
} 

} 

這是工廠或抽象工廠可以在這裏使用的情況。如果是的話,請你舉個例子。對象創建工廠模式

回答

0

就你而言,由於你有兩個具有兩個不同接口的類,工廠在這裏確實不適用。您應該使用抽象工廠作爲其對象,並將對象初始化委託給其單獨的函數。

抽象工廠接口爲您的例子放在這裏

public Interface IAbstractInterfaceFactory 
{ 

IService1 InitializeService1(); 
IService2 InitializeService2(); 

} 

工廠模式通常用於當你有太多不同的對象初始化實現相同的接口或抽象類。該模式表明有一個工廠方法,並基於對象的類型需要進行初始化,它會創建特定的對象並將其返回。 它有助於在兩個方面 1.保留全部初始化代碼在一個地方 2.永遠不會返回的具體類這使得它更可擴展,可管理的

欲瞭解更多信息,請參閱該鏈接 Differences between Abstract Factory Pattern and Factory Method http://en.wikipedia.org/wiki/Abstract_factory_pattern http://www.codeproject.com/Articles/68670/The-Factory-Pattern http://en.wikipedia.org/wiki/Factory_method_pattern

+0

感謝您的回答。真的幫助了我。只是一個相關的問題是,我經歷了很多抽象工廠的例子,並觀察到幾乎所有例子中的AbstractFactory都比ConcreteFactories更多的實現。在我的情況下,我沒有看到更多的一個具體的工廠模式,它會是抽象工廠模式的正確實現。 – user2045038

+0

這取決於現在可能是一種情況,但在後期如果您引入新接口,則可以由抽象工廠輕鬆處理。我想你會有兩個具體的工廠現在爲IService1和其他Iservice2兩個完全獨立 –

+0

我仍然無法理解爲什麼在這種情況下,我需要創建兩個具體的工廠。作爲一個可以做這樣的工作:public class ConcreateServiceFactory:IAbstractInterfaceFactory {public IService1 InitializeService1(){....} public IService2 InitializeService2(){...}}你能解釋一下嗎? – user2045038