Считается ли он по-прежнему фабрикой, если объекты, возвращаемые фабрикой, являются статическими?

Когда мое приложение запускается, ему нужно получить экземпляр правильного класса 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;
        }

    }
}

person KingNestor    schedule 10.06.2009    source источник


Ответы (4)


Небольшое уточнение по вашей терминологии. Объекты не статичны, только ссылки. Объекты являются экземплярами, которые имеют хотя бы одну статическую ссылку. Когда вы возвращаете объект, вы возвращаете просто ссылку на этот объект. Он понятия не имеет, что в какой-то другой области его удерживает статическое электричество.

Но да, это допустимый заводской шаблон.

person JaredPar    schedule 10.06.2009

На самом деле это будет случай шаблона «Абстрактная фабрика».

person Paul Sonier    schedule 10.06.2009
comment
Это хороший пример того, когда вы можете использовать шаблон абстрактной фабрики. - person David Yancey; 10.06.2009
comment
После прочтения страницы Википедии об абстрактном фабричном шаблоне может показаться, что абстрактная фабрика используется для возврата самой подфабрики, которую затем можно использовать для создания экземпляров объектов. Это не относится к приведенному выше коду, верно? - person mmcdole; 10.06.2009
comment
В примере нет AbstractFactory. Где Абстракт и где бетонный завод? - person TimW; 10.06.2009

Фабричный шаблон по сути является абстракцией (в общем смысле этого термина). Даже если вы возвращаете статические объекты, вы все равно добавляете уровень абстракции, что хорошо и должно рассматриваться как часть фабричного шаблона в целом.

person tathagatac    schedule 10.06.2009

Это будет фабрика-одиночка.

person Gerald    schedule 10.06.2009