问题
I have read a lot of posts about different between Abstract Factory and Factory method, but there are a problem I can't understand.
One difference between the two is that with the Abstract Factory pattern, a class delegates the responsibility of object instantiation to another object via composition whereas the Factory Method pattern uses inheritance and relies on a subclass to handle the desired object instantiation
Maybe I know why Abstract Factory pattern use composition and delegates to create object, but I can't understand why Factory Method pattern uses inheritance to create concrete class objects.
回答1:
Abstract Factory
public interface IMyFactory
{
IMyClass CreateMyClass(int someParameter);
}
Usage:
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
}
}
Notice that SomeOtherClass
relies on Composition to be composed with an IMyFactory
instance.
Factory Method
public abstract class SomeOtherClassBase
{
public void DoSomethingInteresting()
{
var mc = this.CreateMyClass(42);
// Do something interesting here
}
protected abstract IMyClass CreateMyClass(int someParameter)
}
Usage:
public class SomeOtherClass2 : SomeOtherClassBase
{
protected override IMyClass CreateMyClass(int someParameter)
{
// Return an IMyClass instance from here
}
}
Notice that this example relies on inheritance to work.
来源:https://stackoverflow.com/questions/22643449/abstract-factory-vs-factory-method-composition-vs-inplement