我第一次尝试使用工厂方法。似乎有两种方法可以做到这一点,我不确定何时使用哪一种(或者如果其中一种是错误的?)。
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似乎会变得更容易,因为我不必创建所有这些“创建者”子类,除了返回正确类型的员工之外,这些子类实际上没有做太多其他事情。
但是它仍在使用工厂模式吗?
答案 0 :(得分:4)
您的第一个案例是Abstract Factory模式,而第二个案例是Factory Method。这是两种不同的模式,都是有效的和有用的。 (实际上没有“工厂模式” - 每当你听到这个术语时,它就是对上述模式之一的引用。)
如果您只需要创建一个产品,Factory Method通常是更好的选择。如果您(有任何机会)需要创建一系列相关产品,您需要抽象工厂。如果您需要将工厂注入代码中的不同位置,后者也会更好,因为最好有一个独特的接口用于此目的。
答案 1 :(得分:0)
老实说,我不确定哪种方式是“正确的”,但我可以告诉你,你的第二个选项在你的场景中会更有用,正如你所说的那样。我尝试在抽象基类中使用静态创建方法,以便根据必要的逻辑实例化正确的子类。这听起来就像你正在尝试做的那样,我也没有看到任何问题。
请记住,设计模式可作为解决问题和通过标准化帮助维护的指南。如果您发现某些东西保持相同的“精神”,但出于某些明显的原因更好地满足您的需求,我认为没有理由不这样做。