我已经阅读了很多关于抽象工厂和工厂方法之间差异的帖子,但是有一个我无法理解的问题。
两者之间的一个区别在于,对于抽象工厂模式,一个类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化
也许我知道为什么抽象工厂模式使用组合和委托来创建对象,但我不明白为什么工厂方法模式使用继承来创建具体的类对象。
这个问题与抽象工厂是什么或工厂方法是什么无关,因此这里没有答案
这是关于为什么当客户端也可以直接调用工厂方法时,工厂方法似乎使用继承。请取消标记为重复。
我已经阅读了很多关于抽象工厂和工厂方法之间差异的帖子,但是有一个我无法理解的问题。
两者之间的一个区别在于,对于抽象工厂模式,一个类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化
也许我知道为什么抽象工厂模式使用组合和委托来创建对象,但我不明白为什么工厂方法模式使用继承来创建具体的类对象。
这个问题与抽象工厂是什么或工厂方法是什么无关,因此这里没有答案
这是关于为什么当客户端也可以直接调用工厂方法时,工厂方法似乎使用继承。请取消标记为重复。
抽象工厂
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
}
}
请注意,此示例依赖于继承来工作。