фабрика в javascript
Привет.
Недавно совсем узнал о таком понятии как фабрика, хотелось бы спросить, в каких случаях её стоить применять, каким образом это делать лучше, на чем основано её применение? |
то есть, фабрика — это объект, который содержит ссылки на конструкторы?
у меня есть 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'); //мне не нужно знать, какой именно конструктор это сделает, достаточно просто сказать, что я хочу получить
|
Цитата:
Пример кода - классический пример фабрики.
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();
|
Maxmaxmахimus, ты знаешь, что такое паттерн "стратегия"?
Цитата:
Цитата:
Цитата:
Цитата:
Это фабрика что-ли, по-твоему?
function Universe(){
if (!(this instanceof Universe)) return new Universe();
this.foo = "bar";
}
Universe();
|
это синглтон)) вот с ним я разобрался, а теперь не могу нкиак догнать применимость в фабрики в проекте с бекбоном.
подскажите, пожалуйуста, всё ли я правилно понял в примере, который привел? конструкторами там являются backbone.view |
Цитата:
// первый пример
var singleton = { /* обычный хеш */ };
// второй пример
// при вызове возвращается уже давно созданный объект
function Universe(){
var uni = {}; // это он
Universe = function(){
return uni;
}
return uni;
}
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
в проекте будут использоваться формы, причем их будет много (разный дизайн, разные правила валидации и наполнение). одна форма — это будет одна модель и одна вью бекбон. а вот для построения должена использоваться фабрика. |
Цитата:
var a = new Universe(); var b = new Universe(); a === b //true |
блин, опять всё сваливается в разговоры «ты не знаешь, я знаю, ты не прав, я прав». предлагаю не вестить на провокации, каждый думает в меру своего профессионализма)
я вот до сих пор не понимаю, каким образом применять фабрику в бекбоновом проекте) созадёт ли сам бекбон еще один уровень абстрации или нет. ведь с однйо стороны вью расширяют стандартный класс бекбона, с другой стороны вы приводите примеры фабрик «на самом примитивном уровне». видимо я совсем не пойму сути, поэтмоу очень прошу вас указать на хорошие источники, либо объяснить на конкретном примере (коде, который я привел). |
Цитата:
Цитата:
Цитата:
http://javascript.ru/forum/183277-post4.html читай :lol: Цитата:
нет, просто у этих двух есть общие черты. |
| Часовой пояс GMT +3, время: 23:11. |