Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 如果工厂返回的对象是静态的,它仍然被视为工厂吗?_Language Agnostic_Design Patterns_Factory - Fatal编程技术网

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

Language agnostic 如果工厂返回的对象是静态的,它仍然被视为工厂吗?,language-agnostic,design-patterns,factory,Language Agnostic,Design Patterns,Factory,当我的应用程序启动时,它需要根据用户登录的内容获取正确DAL类的实例(目前有4个)。某些用户正在从某些数据库中删除 如果我不实例化那些DAL类的实例,而是简单地返回它的正确静态实例,那么它仍然被认为是“工厂”模式吗?我不需要不断地创建这些对象,因为所有用户都可以共享它们 伪代码: public class RepositoryFactory { public static IRepository repoA = new FranksLumberRepo(); public sta

当我的应用程序启动时,它需要根据用户登录的内容获取正确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;
        }

    }
}

实际上,这是一种“抽象工厂”模式。

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

这将是一个单例工厂。

对您的术语稍加澄清。对象不是静态的,只是引用。对象是至少有一个静态引用的实例。当您返回对象时,您返回的只是对该对象的引用。它不知道有一个静电把它固定在其他地方


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

这是一个很好的例子,说明了何时可以使用抽象工厂模式。在阅读了关于抽象工厂模式的Wikipedias页面后,抽象工厂似乎被用来返回子工厂本身,然后可以用来实例化对象。上面的代码不是这样的,对吗?示例中没有AbstractFactory。抽象的东西在哪里,混凝土工厂在哪里?