工厂模式问题

时间:2011-03-22 15:54:45

标签: .net design-patterns

我第一次尝试使用工厂方法。似乎有两种方法可以做到这一点,我不确定何时使用哪一种(或者如果其中一种是错误的?)。

1)创建一个抽象类,该类具有被子类重写的方法:

public abstract class EmployeeCreator
{
    public abstract Employee FactoryMethod();
}

public class DeveloperCreator : EmployeeCreator
{
    public override Employee FactoryMethod()
    {
        return new Developer();
    }
}

2)创建一个包含一个工厂方法的类:

public class EmployeeFactory
{
    public static Employee CreateEmployee(EmployeeType type)
    {
        if (type == EmployeeType.Developer)
            return new Developer();
        else
            return new Secretary();
    }
}

在我的情况下,#2似乎会变得更容易,因为我不必创建所有这些“创建者”子类,除了返回正确类型的员工之外,这些子类实际上没有做太多其他事情。

但是它仍在使用工厂模式吗?

2 个答案:

答案 0 :(得分:4)

您的第一个案例是Abstract Factory模式,而第二个案例是Factory Method。这是两种不同的模式,都是有效的和有用的。 (实际上没有“工厂模式” - 每当你听到这个术语时,它就是对上述模式之一的引用。)

如果您只需要创建一个产品,Factory Method通常是更好的选择。如果您(有任何机会)需要创建一系列相关产品,您需要抽象工厂。如果您需要将工厂注入代码中的不同位置,后者也会更好,因为最好有一个独特的接口用于此目的。

答案 1 :(得分:0)

老实说,我不确定哪种方式是“正确的”,但我可以告诉你,你的第二个选项在你的场景中会更有用,正如你所说的那样。我尝试在抽象基类中使用静态创建方法,以便根据必要的逻辑实例化正确的子类。这听起来就像你正在尝试做的那样,我也没有看到任何问题。

请记住,设计模式可作为解决问题和通过标准化帮助维护的指南。如果您发现某些东西保持相同的“精神”,但出于某些明显的原因更好地满足您的需求,我认为没有理由不这样做。