
21.06.2012, 19:57
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
фабрика в javascript
Привет.
Недавно совсем узнал о таком понятии как фабрика, хотелось бы спросить, в каких случаях её стоить применять, каким образом это делать лучше, на чем основано её применение?
|
|

22.06.2012, 13:01
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
то есть, фабрика — это объект, который содержит ссылки на конструкторы?
у меня есть 4 конструктора (Backbone.View), я не хочу знать о каждом из них. я просто создаю объект, который имеет метод create и знает обо всех 4 конструкторах. передавая в create тип вью, который мне надо получить, я его и получаю.
так?
var a1 = Backbone.View({});
var a2 = Backbone.View({});
var a3 = Backbone.View({});
var a4 = Backbone.View({});
function b() {
var types = {
first: a1,
second: a2,
third: a3,
fourth: a4
};
return {
create: function (type) {
var c;
c = new types[type]();
return c;
}
}
}
var d = new b();
d.create('first'); //мне не нужно знать, какой именно конструктор это сделает, достаточно просто сказать, что я хочу получить
|
|

22.06.2012, 13:30
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от tadjik1
|
Привет.
Недавно совсем узнал о таком понятии как фабрика, хотелось бы спросить, в каких случаях её стоить применять, каким образом это делать лучше, на чем основано её применение?
|
Этот шаблон применяется, когда нужно выполнить повторяющиеся операции при создании похожих объектов. Объекты, созданные таким образом, обычно имеют один прототип. Самое главное, эти объекты являются подклассами, которые реализуют специализированные функциональные возможности.
Пример кода - классический пример фабрики.
function factory() {}
// это будет у всехэкземпляров, созданных фабрикой
factory.prototype.say = function(){
alert( "Привет. Я : " + this.sex );
}
// фабричный метод
factory.make = function(type){
var copy;
// чтобы каждый раз не устанавливать прототип.
if (factory[type].prototype.say === undefined) {
factory[type].prototype = new factory();
}
copy = new factory[type]();
// что-нибудь ещё добавляем.
copy.creationTime = Date.now();
return copy;
}
// конструкторы узкоспециализированных классов.
factory.male = function() {
this.sex = "male";
};
factory.female = function() {
this.sex = "female";
};
// использование
var one = factory.make("male");
var two = factory.make("female");
one.say();
two.say();
|
|

22.06.2012, 14:00
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Maxmaxmахimus, ты знаешь, что такое паттерн "стратегия"?
Сообщение от Maxmaxmахimus
|
круто, ты описал конструкторы))
|
круто взять и перебить на первых словах, не дочитав до конца
Сообщение от Maxmaxmахimus
|
это что за возможности такие? я что-то ни одной не нашел.
|
а в factory.male что?
Сообщение от Maxmaxmахimus
|
Но нормальные пасоны делают не через жопу, а как задуманно:
|
Где тут фабрика?
Сообщение от Maxmaxmахimus
|
Фабрика нужна чтобы работать без оператора new, больше она не зачем не нужна имхо.
|
окей.
Это фабрика что-ли, по-твоему?
function Universe(){
if (!(this instanceof Universe)) return new Universe();
this.foo = "bar";
}
Universe();
|
|

22.06.2012, 14:06
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
это синглтон)) вот с ним я разобрался, а теперь не могу нкиак догнать применимость в фабрики в проекте с бекбоном.
подскажите, пожалуйуста, всё ли я правилно понял в примере, который привел? конструкторами там являются backbone.view
|
|

22.06.2012, 14:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от tadjik1
|
это синглтон)) вот с ним я разобрался,
|
не разобрался. Это не синглтон. Оный - один и тот же объект :
// первый пример
var singleton = { /* обычный хеш */ };
// второй пример
// при вызове возвращается уже давно созданный объект
function Universe(){
var uni = {}; // это он
Universe = function(){
return uni;
}
return uni;
}
Сообщение от tadjik1
|
теперь не могу нкиак догнать применимость в фабрики в проекте с бекбоном.
|
что Вам именно нужно?
Сообщение от tadjik1
|
подскажите, пожалуйуста, всё ли я правилно понял в примере, который привел? конструкторами там являются backbone.view
|
и да, и нет. фабрика не преследует цели скрыть от пользователя-программиста реализацию.
Сообщение от Maxmaxmахimus
|
Фабрика нужна чтобы работать без оператора new, больше она не зачем не нужна.
|
Сообщение от Maxmaxmахimus
|
я сказал что ОСНОВНАЯ СУТЬ фабрики в отсутствии оператора new?
|
нет. ты сказал, что это её единственная цель
Сообщение от Maxmaxmахimus
|
ПОКА это лишь ненужный запутывающий паттерн
|
ты его просто не понял \ не знаешь.
Последний раз редактировалось melky, 22.06.2012 в 14:14.
|
|

22.06.2012, 14:20
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
Сообщение от melky
|
что Вам именно нужно?
|
melky,
в проекте будут использоваться формы, причем их будет много (разный дизайн, разные правила валидации и наполнение).
одна форма — это будет одна модель и одна вью бекбон. а вот для построения должена использоваться фабрика.
|
|

22.06.2012, 14:22
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
Сообщение от melky
|
не разобрался. Это не синглтон. Оный - один и тот же объект :
// первый пример
var singleton = { /* обычный хеш */ };
// второй пример
// при вызове возвращается уже давно созданный объект
function Universe(){
var uni = {}; // это он
Universe = function(){
return uni;
}
return uni;
}
|
последние дни провожу в обнимку с книгой Стефанова «паттерны яваскрипт», в ней этот способ указан как «создание синглтона через экземпляр в замыкании»
var a = new Universe();
var b = new Universe();
a === b //true
Последний раз редактировалось tadjik1, 22.06.2012 в 14:29.
|
|

22.06.2012, 14:28
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
блин, опять всё сваливается в разговоры «ты не знаешь, я знаю, ты не прав, я прав». предлагаю не вестить на провокации, каждый думает в меру своего профессионализма)
я вот до сих пор не понимаю, каким образом применять фабрику в бекбоновом проекте) созадёт ли сам бекбон еще один уровень абстрации или нет. ведь с однйо стороны вью расширяют стандартный класс бекбона, с другой стороны вы приводите примеры фабрик «на самом примитивном уровне». видимо я совсем не пойму сути, поэтмоу очень прошу вас указать на хорошие источники, либо объяснить на конкретном примере (коде, который я привел).
|
|

22.06.2012, 14:31
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от tadjik1
|
melky,
в проекте будут использоваться формы, причем их будет много (разный дизайн, разные правила валидации и наполнение).
одна форма — это будет одна модель и одна вью бекбон. а вот для построения должена использоваться фабрика.
|
так ... а зачем нужна именно она, а не простой конструктор с прототипом?
Сообщение от tadjik1
|
последние дни провожу в обнимку с книгой Стефанова «паттерны яваскрипт», в ней этот способ указан как «создание синглтона через экземпляр в замыкании»
|
там же есть описание паттерна "Фабрика" ... всё разжёвано до состояния жидкости.
Сообщение от Maxmaxmахimus
|
Ну так просвятиии меня) что я и прошу)) я же не хочу блуждать во тме невежества и лолжных представлений о чем -то ))) просвяти меня чтобы я узрел свет и истину про этот паттерн XD
|
не вопрос, чувак.
фабрика в javascript
читай
Сообщение от Maxmaxmахimus
|
зачем же он нужен)?? чтобы делать "стратегию" что ли?
|
а люди, для того, чтобы делать людей
нет, просто у этих двух есть общие черты.
|
|
|
|