我第一次尝试使用工厂方法。似乎有两种方法可以做到这一点,但我不确定何时使用哪一种(或者其中一种是错误的?)。
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似乎要容易得多,因为我不需要创建所有这些"creator“子类,这些子类除了返回正确的employee类型之外,实际上并不做太多的事情。
但是它还在使用工厂模式吗?
发布于 2011-03-22 23:57:27
第一种情况是Abstract Factory模式,第二种情况是Factory Method。这是两种不同的模式,都是有效和有用的。(实际上没有“工厂模式”-每当您听到这个术语时,它都是对上面提到的模式之一的引用。)
如果只有一个产品要创建,则Factory方法通常是更好的选择。如果您有(任何机会)需要创建相关产品系列,则需要Abstract Factory。如果您需要将工厂注入到代码中的不同位置,则后者也更好,因为有一个不同的接口来实现这一目的更好。
发布于 2011-03-22 23:59:08
老实说,我不确定哪种方式是“正确的”,但我可以告诉您,您的第二种选择在您的场景中会更有用,正如您所说的那样。我尽量在抽象基类中使用静态创建方法,以便根据必要的逻辑实例化正确的子类。听起来这也是你想要做的,我看不出有什么问题。
请记住,设计模式是解决问题的指南,并通过标准化来帮助可维护性。如果你发现一些东西保持了相同的“精神”,但出于某种可识别的原因更适合你的需求,我看不出有什么理由不去追求它。
https://stackoverflow.com/questions/5394000
复制相似问题