首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂模式问题

工厂模式问题
EN

Stack Overflow用户
提问于 2011-03-22 23:54:45
回答 2查看 156关注 0票数 0

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

1)创建一个方法被子类覆盖的抽象类:

代码语言:javascript
复制
public abstract class EmployeeCreator
{
    public abstract Employee FactoryMethod();
}

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

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

代码语言:javascript
复制
public class EmployeeFactory
{
    public static Employee CreateEmployee(EmployeeType type)
    {
        if (type == EmployeeType.Developer)
            return new Developer();
        else
            return new Secretary();
    }
}

在我的例子中,#2似乎要容易得多,因为我不需要创建所有这些"creator“子类,这些子类除了返回正确的employee类型之外,实际上并不做太多的事情。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-22 23:57:27

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

如果只有一个产品要创建,则Factory方法通常是更好的选择。如果您有(任何机会)需要创建相关产品系列,则需要Abstract Factory。如果您需要将工厂注入到代码中的不同位置,则后者也更好,因为有一个不同的接口来实现这一目的更好。

票数 4
EN

Stack Overflow用户

发布于 2011-03-22 23:59:08

老实说,我不确定哪种方式是“正确的”,但我可以告诉您,您的第二种选择在您的场景中会更有用,正如您所说的那样。我尽量在抽象基类中使用静态创建方法,以便根据必要的逻辑实例化正确的子类。听起来这也是你想要做的,我看不出有什么问题。

请记住,设计模式是解决问题的指南,并通过标准化来帮助可维护性。如果你发现一些东西保持了相同的“精神”,但出于某种可识别的原因更适合你的需求,我看不出有什么理由不去追求它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5394000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档