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
如果您*赞成组合优于继承*,应该清楚您应该赞成哪一个;) –