1
我已經閱讀了很多關於抽象工廠和工廠方法之間不同的帖子,但是有一個我無法理解的問題。兩者之間抽象工廠vs工廠方法:組成VS Inplement?
一個區別是用抽象工廠 圖案,一類代表對象實例化 的另一個目的通過組合物而工廠方法模式 責任使用繼承和依賴於一個子類來處理所需的對象 實例
也許我知道爲什麼抽象工廠模式應用組合物和代表創建的對象,但我不明白爲什麼工廠方法模式使用繼承來創建具體的類的對象。
我已經閱讀了很多關於抽象工廠和工廠方法之間不同的帖子,但是有一個我無法理解的問題。兩者之間抽象工廠vs工廠方法:組成VS Inplement?
一個區別是用抽象工廠 圖案,一類代表對象實例化 的另一個目的通過組合物而工廠方法模式 責任使用繼承和依賴於一個子類來處理所需的對象 實例
也許我知道爲什麼抽象工廠模式應用組合物和代表創建的對象,但我不明白爲什麼工廠方法模式使用繼承來創建具體的類的對象。
抽象工廠
public interface IMyFactory
{
IMyClass CreateMyClass(int someParameter);
}
用法:
public class SomeOtherClass
{
private readonly IMyFactory factory;
public SomeOtherClass(IMyFactory factory)
{
this.factory = factory;
}
public void DoSomethingInteresting()
{
var mc = this.factory.CreateMyClass(42);
// Do something interesting here
}
}
注意SomeOtherClass
依賴於組成與一個IMyFactory
實例組成。
工廠方法
public abstract class SomeOtherClassBase
{
public void DoSomethingInteresting()
{
var mc = this.CreateMyClass(42);
// Do something interesting here
}
protected abstract IMyClass CreateMyClass(int someParameter)
}
用法:
public class SomeOtherClass2 : SomeOtherClassBase
{
protected override IMyClass CreateMyClass(int someParameter)
{
// Return an IMyClass instance from here
}
}
注意這個例子依賴於繼承工作。
+1簡單 –
好吧,我明白,但哪種風格更好,有什麼優勢?或者我們可以使用其中的任何一種? – grep
如果您*贊成組合優於繼承*,應該清楚您應該贊成哪一個;) –