1
(我使用C#在我的例子,但這個問題沒有具體關於C#)讓兩家工廠返回實現兩個接口相同的對象
我們工廠創建多個接口的對象,每個接口一個工廠。
假設我們有一個PrintingFactory
來創建實現IPrinting
和ScanningFactory
的對象IScanning
。我們有實施IPrinting
的混凝土打印機和實施IScanning
的混凝土掃描儀,工廠決定選擇哪種實施。
在ScanningFactory
我:
public static IScanning Build()
{
...
return new CanonXYZ2000();
}
我在PrintingFactory
類似的代碼,並在main
我:
scanner = ScanningFactory.Build();
printer = PrintingFactory.Build();
現在,如果我想要實例化一個對象會發生什麼實現兩個接口?
public class CanonXYZ2001MultiPurpose: IPrinting, IScanning {...}
我想兩個工廠都返回相同的對象。我如何正確地做到這一點?
這就是我所擁有的,它創造了兩個對象,我只需要一個。一個通過掃描工廠實例化並作爲掃描儀返回,然後另一個通過打印工廠實例化並作爲打印機返回。 在工廠裏,我知道在什麼情況下我們創建了一個多用途機器,只是這兩個工廠需要一些機制來訪問另一個可能已經實例化的對象。我想在這個黑暗中保留'main','main'只想掃描和打印,它不關心細節。 –
在這種情況下,您可以使用單個工廠,它接受所需的類型並返回適當的實例。在內部它可以保存每種類型的特定工廠列表。你也需要跟蹤你已經創建的所有實例。 當Build(Type t)被調用時,你可以檢查你是否已經有了符合你的需求的實例(例如實現IPrinting和IScanning)。如果你有這樣的實例 - 你可以返回它,否則你只需調用合適的工廠以獲得特定的類型,在內部存儲這個實例並將它返回給主叫方。 –