Как Фабрики и Шаблоны имеют отношение?

Я просто читал поток на том, Так, чтобы обсуждал достоинства Singleton по сравнению со Статическими Классами.

Некоторые люди упомянули, что шаблон X, казалось, был большим количеством 'фабрики', а не Singleton 'шаблон'.

Каковы различия между 'фабрикой' и 'шаблоном разработки'?

7
задан George Stocker 5 February 2010 в 12:49
поделиться

9 ответов

В основном существует три вида параметров: указатель, ссылка и прямая.

Разница довольно проста: прямые параметры передаются по значению, и приемник получает копию пройденного; это означает, что если параметр изменяется получателем, то эти изменения не будут отражены вызывающему абоненту. (Это часто называется, достаточно, пройти по значению, или bycopy .

Указатели также передаются по значению, но вместо отправки фактического значения вызывающий абонент посылает адрес значения. Это означает, что, следуя за этим указателем, получатель может изменить аргумент. Обратите внимание, что изменения, внесенные в фактический указатель , все еще не отражаются на вызывающем абоненте.

Окончательная форма, call-by-reference, представляет собой своего рода золотую середину между этими двумя подходами. По существу его можно рассматривать как указатель, который выглядит как значение.

Стоит упомянуть, что в основе всего этого параметры всегда передаются по значению, но разные языки имеют разные способы реализации эталонной семантики (см. ответ Килотанса).

// Example using C
// bycopy
int multiply(int x, int y) {
  return x * y;
}

void multiply_p(int *x, int y) {
  *x *= y;
}


int main () {
  int i, j, k;
  i = 20;
  j = 10;
  k = multiply(i,j); // k is now 200
  multiply_p(&i, k); // i is now 4000 (200 * 20)
  return 0;
}
-121--4551155-

Фабрики и синглтоны - это некоторые из множества моделей проектирования.

Заводской шаблон может быть реализован как одноэлементный шаблон, который производит объекты. Фабрика также может быть привкусным классом, а значит, и не синглтоном. Аналогично, одиночный компьютер может быть фабрикой, но он также может быть чем-то другим, например, глобальным менеджером настроек или реестром событий.

-121--1906147-

"Фабрика" - это специфический дизайн: http://en.wikipedia.org/wiki/Factory_method_pattern

Аналогично "singleton" также является шаблоном конструкции: http://en.wikipedia.org/wiki/Singleton_pattern

9
ответ дан 6 December 2019 в 23:05
поделиться

"Завод" - это вид конструкторской схемы. Пару примеров абстрактной фабрики можно посмотреть здесь или заводской метод здесь , основанный на контексте

.
0
ответ дан 6 December 2019 в 23:05
поделиться

Когда вы запрашиваете фавикон в Google, вы можете взглянуть на заголовки ответов.

Last-Modified: Fri, 09 Jan 2009 16:35:02 GMT
Date: Thu, 01 Dec 2010 00:00:01 GMT
Expires: Fri, 01 Dec 2011 00:00:01 GMT
Cache-Control: public, max-age=31536000
Age: 7

Если поместить заголовок "Expires:" в ответ, клиентские браузеры повторно запросят значок после этой отметки времени. При активной разработке можно установить отметку времени истечения срока действия на секунду или две в будущем, и всегда получать это, хотя это плохой долгосрочный план.

-121--1749298-

Почему бы просто не использовать params object []:

public static DataRow NewRow(this DataTable dataTable, params object[] objects)
{
    DataRow returnValue = dataTable.NewRow();

    while (objects.Length > returnValue.Table.Columns.Count)
    {
        returnValue.Table.Columns.Add();
    }

    returnValue.ItemArray = objects;
    return returnValue;
}

Тогда вы можете просто назвать это так:

myDataTable.NewRow(1,2,"hello");
-121--4244599-

Множество ответов, но ни один, кажется, на самом деле не дифференцирует между двумя шаблонами хорошо. Позвольте мне попробовать, если я не могу запутать вопрос больше.

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

Фабрика используется для создания одиночек и в других ситуациях. Он может использоваться для замены слова "новый" во многих случаях. Одно из преимуществ состоит в том, что можно написать фабрику, чтобы тип возвращаемого объекта был "Set". Таким образом, ваша структура тестирования может "установить" имитационный объект вместо реального - и остальная часть вашей системы затем будет использовать имитационный объект.

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

0
ответ дан 6 December 2019 в 23:05
поделиться

Фабрики и синглтоны являются одними из многих шаблонов проектирования.

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

1
ответ дан 6 December 2019 в 23:05
поделиться

"фабрика", а не "шаблон" синглтона

Позвольте мне конкретизировать это и правильно поставить кавычки:

"фабричный шаблон", а не "одиночный шаблон"

Оба являются шаблонами проектирования .

1
ответ дан 6 December 2019 в 23:05
поделиться

Factory - это шаблон проектирования , а не наоборот.

0
ответ дан 6 December 2019 в 23:05
поделиться

Выбор языка зависит от того, что вы хотите сделать, но я очень уверен, что различные требования к месту на жестком диске будут наименее важным аспектом вашего решения.

Вот возможный намек: если вы хотите повторно использовать свою работу (или ее части) в настольном приложении, используйте Java. PHP практически отсутствует для всего, кроме веб-программирования.

-121--4557545-

Перейдя от использования этого годами, к поиску не так много людей (по крайней мере, в моем опыте) используют его, я в конечном итоге изменился. Преимущества, которые я вижу, имея этот код без кода:

  • Я использую подчеркивания: _ myVar для частных переменных, которые не нуждаются в этот , так как они всегда членами переменные.
  • Для вызовов метода очень очевидно, что он является частью класса. Если бы это было не так, вы бы добавили имя типа.
  • (C #) Частные переменные и параметры - это всегда случай верблюда.
  • Если ваш класс настолько велик, это сбивает вас с толку, у вас все равно есть проблема сплоченности и разделения проблем.
  • (C #) Типы цветовых кодов Visual Studio, чтобы вы знали, используете ли вы свойство или тип:

например

someclass.Method(1);
SomeClass.StaticMethod(1);

Я вижу, что если не использовать соглашение об именовании подчеркиваний и иметь большой метод с весомым телом, это может привести к некоторой путанице.

Статические методы или свойства могут иногда путать вещи, но очень редко.

Очевидно, что при передаче ссылок всегда требуется ключевое слово this , например:

someclass.Method(this);
var someclass = new SomeClass(this);

( Я пишу C #, но мой ответ относится к Java )

-121--2444727-

Вы немного ошиблись. «Фабрика» тоже образец и контрастирует здесь с «Синглтоном».

0
ответ дан 6 December 2019 в 23:05
поделиться

factory является шаблоном проектирования :-), как и Singleton. можно утверждать, что синглтон - это своего рода фабрика. Он создает объект, когда это необходимо, и использует установленную политику изменения (которая всегда возвращает один и тот же объект после того, как он был создан), но это болезненно и, как правило, просто сбивает с толку в большинстве споров о структуре

0
ответ дан 6 December 2019 в 23:05
поделиться

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

Вот хорошая ссылка http://en.wikipedia.org/wiki/Factory_method_pattern

0
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: