如果工厂返回的对象是静态的,它仍被视为工厂吗?

时间:2009-06-10 03:05:43

标签: language-agnostic design-patterns factory

当我的应用程序启动时,它需要根据用户的登录情况获取正确的DAL类的实例(目前有4个)。某些用户正在从某些数据库中删除。

它是否仍被视为“工厂”模式,如果不是实例化那些DAL类的实例,我只返回它的正确静态实例?我不需要不断创建这些对象,因为所有用户都可以共享它们。

伪码:

public class RepositoryFactory
{
    public static IRepository repoA = new FranksLumberRepo();
    public static IRepository repoB = new LowesHardwareRepo();
    public static IRepository repoC = new HackmansHardwareRepo();
    public static IRepository repoD = new TomsHardwareRepo();

    public IRepository createRepo(User currentUser)
    {
        switch(User.Store)
        {
             case FrankLumber:
                  return repoA;
             case LowesHardware:
                  return repoB;
             case Hackmans:
                  return repoC;
             case TomsHardware:
                  return repoD;
             default:
                  throw exception;
        }

    }
}

4 个答案:

答案 0 :(得分:4)

略微澄清您的术语。对象不仅仅是引用的静态。对象是具有至少一个静态引用的实例。当您返回对象时,您只返回对该对象的引用。它不知道在其他一些区域存在静态。

但是,这是一个有效的工厂模式。

答案 1 :(得分:2)

实际上,这将是“抽象工厂”模式的情况。

答案 2 :(得分:1)

工厂模式本质上是一种抽象(在术语的一般意义上)。即使你返回静态对象,你仍然会添加一个抽象层,这很好,一般应该被认为是工厂模式的一部分。

答案 3 :(得分:0)

这将是一个单身工厂。