представлять
Подобно режиму создания, при создании объекта (рассматриваемый как продукт на заводе), нет необходимости указывать конкретный класс для создания объекта.
Заводской шаблон определяет интерфейс для создания объектов, и этот интерфейс определяется подклассом для создания экземпляра того класса. Этот шаблон задерживает экземпляр класса до подкласса. Подклассы могут переопределять методы интерфейса, чтобы указать свой собственный тип объекта при их создании.
Этот режим очень полезен, особенно при создании назначений процессов для объектов, таких как полагаться на многие файлы настройки. Кроме того, вы часто увидите заводские методы в вашей программе, чтобы класс подкласса определил тип объекта, который необходимо создать.
текст
В следующем примере улучшенная версия кода шаблона конструктора в главе 26 с использованием метода завода:
Кода -копия выглядит следующим образом:
var car = (function () {
var car = function (модель, год, миль) {
this.model = модель;
this.year = год;
this.miles = miles;
};
Функция возврата (модель, год, миль) {
вернуть новую машину (модель, год, мили);
};
}) ();
var tom = new Car («Том», 2009, 20000);
var dudu = new Car ("dudu", 2010, 5000);
Если это трудно понять, давайте приведем другой пример:
Кода -копия выглядит следующим образом:
var ProductManager = {};
productmanager.createproducta = function () {
console.log ('producta');
}
productmanager.createproductb = function () {
console.log ('productb');
}
productmanager.factory = function (typetype) {
вернуть новый ProductManager [typetype];
}
ProductManager.Factory ("CreateProducta");
Если мы еще не понимаем этого, то давайте будем более подробными. Если мы хотим вставить некоторые элементы в веб -страницу, и эти элементы не зафиксированы в типах, это могут быть изображения, соединения или даже текст. Согласно определению заводской шаблона, мы должны определить класс завода и соответствующий подкласс. Давайте сначала определим конкретную реализацию подкласса (то есть подфункция):
Кода -копия выглядит следующим образом:
var page = page || {};
page.dom = page.dom || {};
// подфункция 1: Текст обработки
page.dom.text = function () {
this.insert = function (где) {
var txt = document.createtextnode (this.url);
где.appendChild (TXT);
};
};
// подфункция 2: обработка
page.dom.link = function () {
this.insert = function (где) {
var link = document.createElement ('a');
link.href = this.url;
link.appendchild (document.createtextnode (this.url));
где. AppledChild (ссылка);
};
};
// подфункция 3: Обработка изображений
page.dom.image = function () {
this.insert = function (где) {
var im = document.createElement ('img');
im.src = this.url;
где. AppledChild (Im);
};
};
Итак, как мы определяем функции обработки фабрики? Это на самом деле очень просто:
Кода -копия выглядит следующим образом:
page.dom.factory = function (type) {
вернуть новую страницу.dom [type];
}
Как использовать его следующим образом:
Кода -копия выглядит следующим образом:
var o = page.dom.factory ('link');
o.url = 'http://www.cnblogs.com';
o.insert (document.body);
На данный момент я считаю, что все уже поняли введение заводской модели, поэтому я больше не буду ее описывать.
Суммировать
Когда использовать фабричный режим
Заводская модель особенно полезна в следующих сценариях:
1. Конструкция объектов очень сложная
2. Вам нужно полагаться на конкретную среду, чтобы создать разные экземпляры
3. Обработка большого количества небольших объектов с одинаковыми атрибутами
Когда не следует использовать фабричный режим
Не злоупотребляйте заводской моделью, иногда она просто добавляет ненужную сложность в код и затрудняет запуск теста.