Прежде чем читать эту статью, рекомендуется прочитать эту статью: Одиночный режим шаблонов проектирования JavaScript. В конце концов, я лично считаю, что лучше действовать шаг за шагом.
Шаблон фабрики делится на простой шаблон фабрики и сложный шаблон фабрики. Первый использует класс для создания экземпляра, обычно одноэлементного. Второй использует подкласс, чтобы определить, экземпляром какого класса является переменная-член. Фабрика состоит из комплексных заводов.
Давайте поговорим об этой фабрике подробнее на конкретном примере.
Использование технологии Ajax для инициирования асинхронных запросов сегодня является распространенной задачей в веб-разработке.
1 //реализует AjaxHandler, создает сложную фабрику для выполнения серии процессов Ajax, которая содержит две простые фабрики
2 вар SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 //Первая простая фабрика выполняет создание, запрос и отправку Ajax. . . ждать
6 запрос: функция (метод, URL, обратный вызов, postVars) {
7 вар xhr = this.createXhrObject();
8 xhr.onreadystatechange = функция(){
9 if(xhr.readyState!= 4) return;
10 (xhr.status == 200) ?
11 //Определен обратный вызов глобального объекта для выполнения применения возвращаемых параметров
12 обратный вызов.успех(xhr.responseText,xhr.responseXML):
13 callback.failure(xhr.status);
14};
15 xhr.open(метод, URL, правда);
16 if(method != "POST") postVars = null;
17 xhr.send(postVars);
18},
19 //Вторая простая фабрика создает объекты XHR в зависимости от различных ситуаций. Она может возвращать правильный объект XHR независимо от ситуации.
20 createXhrObject:function(){
21 вар-метод = [
22 функция() {возвратить новый XMLHttpRequest();},
23 function(){вернуть новый ActiveXObject('Msxml2.XMLHttp');},
24 function(){вернуть новый ActiveXObject('Microsoft.XMLHttp');}
25];
26 for(var я = 0; я <3; я++){
27 попыток{
28 методов[i]();
29 }поймать(е){
30 продолжить;
31}
32 this.createXhrObject = методы[i]();
33 метода возврата[i]();
34}
35 выдать новую ошибку("Ошибка!");
36}
37 }
38
Учитывая это, фабричный шаблон, как правило, является дальнейшим расширением и применением одного шаблона. Приведенный выше пример можно назвать так:
1 window.onload = функция(){
2 вар myHandler = новый SimpleHandler();
3 вар обратный вызов = {
4 успех: функция (responseText,responseXML) {alert («Успех:» + ответXML);},
5 сбой: функция (statusCode) {alert («Сбой» + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',обратный вызов);
8
9 };//Конечно, обратный вызов будет разным в зависимости от ситуации.
Используя шаблон фабрики вместо использования нового ключевого слова и конкретных классов, вы можете централизовать весь код экземпляра в одном месте.
Используя шаблон фабрики, вы можете сначала создать абстрактный родительский класс, а затем создать фабричные методы в подклассе, тем самым отложив создание экземпляров объектов-членов для более специализированных подклассов, что может эффективно предотвратить дублирование кода.