抽象工厂与工厂方法:构成与实施?

时间:2014-03-25 18:36:09

标签: design-patterns abstract-factory factory-method

我已经阅读了很多关于抽象工厂和工厂方法之间不同的帖子,但是有一个我无法理解的问题。

  

两者之间的一个区别在于抽象工厂   模式,一个类委托对象实例化的责任   通过组合到另一个对象,而工厂方法模式   使用继承并依赖子类来处理所需的对象   实例

也许我知道为什么抽象工厂模式使用组合和委托来创建对象,但我无法理解为什么工厂方法模式使用继承来创建具体的类对象。

1 个答案:

答案 0 :(得分:5)

抽象工厂

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依赖于Composition与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
    }
}

请注意,此示例依赖继承来工作。