Я просто читал поток на том, Так, чтобы обсуждал достоинства Singleton по сравнению со Статическими Классами.
Некоторые люди упомянули, что шаблон X, казалось, был большим количеством 'фабрики', а не Singleton 'шаблон'.
Каковы различия между 'фабрикой' и 'шаблоном разработки'?
В основном существует три вида параметров: указатель, ссылка и прямая.
Разница довольно проста: прямые параметры передаются по значению, и приемник получает копию пройденного; это означает, что если параметр изменяется получателем, то эти изменения не будут отражены вызывающему абоненту. (Это часто называется, достаточно, пройти по значению, или 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
"Завод" - это вид конструкторской схемы. Пару примеров абстрактной фабрики можно посмотреть здесь или заводской метод здесь , основанный на контексте
.Когда вы запрашиваете фавикон в 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, где фабрика смотрит на то, что нужно, и строит цепочки объектов для удовлетворения этих потребностей.
Фабрики и синглтоны являются одними из многих шаблонов проектирования.
Фабрика шаблон может быть реализован как одноэлементный шаблон, который создает объекты. Фабрика также может быть экземпляром класса. , а значит, и не синглтон. Точно так же синглтон может быть фабрикой, но также может быть чем-то еще, например, менеджером глобальных настроек или реестром событий.
"фабрика", а не "шаблон" синглтона
Позвольте мне конкретизировать это и правильно поставить кавычки:
"фабричный шаблон", а не "одиночный шаблон"
Оба являются шаблонами проектирования .
Выбор языка зависит от того, что вы хотите сделать, но я очень уверен, что различные требования к месту на жестком диске будут наименее важным аспектом вашего решения.
Вот возможный намек: если вы хотите повторно использовать свою работу (или ее части) в настольном приложении, используйте Java. PHP практически отсутствует для всего, кроме веб-программирования.
-121--4557545- Перейдя от использования этого
годами, к поиску не так много людей (по крайней мере, в моем опыте) используют его, я в конечном итоге изменился. Преимущества, которые я вижу, имея этот код без кода:
_ myVar
для частных переменных, которые не нуждаются в этот
, так как они всегда членами переменные. например
someclass.Method(1);
SomeClass.StaticMethod(1);
Я вижу, что если не использовать соглашение об именовании подчеркиваний и иметь большой метод с весомым телом, это может привести к некоторой путанице.
Статические методы или свойства могут иногда путать вещи, но очень редко.
Очевидно, что при передаче ссылок всегда требуется ключевое слово this
, например:
someclass.Method(this);
var someclass = new SomeClass(this);
( Я пишу C #, но мой ответ относится к Java )
-121--2444727-Вы немного ошиблись. «Фабрика» тоже образец и контрастирует здесь с «Синглтоном».
factory является шаблоном проектирования :-), как и Singleton. можно утверждать, что синглтон - это своего рода фабрика. Он создает объект, когда это необходимо, и использует установленную политику изменения (которая всегда возвращает один и тот же объект после того, как он был создан), но это болезненно и, как правило, просто сбивает с толку в большинстве споров о структуре
Фабрика - это тип шаблона проектирования. По сути, фабрика возвращает класс, зависящий от потребностей вызывающего класса. Все классы, возвращаемые фабрикой, должны иметь один и тот же интерфейс, чтобы вы могли вызывать для них одни и те же общедоступные методы (хотя то, как каждый класс реализует метод, может быть разным).
Вот хорошая ссылка http://en.wikipedia.org/wiki/Factory_method_pattern