Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2012, 19:57
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

фабрика в javascript
Привет.
Недавно совсем узнал о таком понятии как фабрика, хотелось бы спросить, в каких случаях её стоить применять, каким образом это делать лучше, на чем основано её применение?
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2012, 13:01
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 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'); //мне не нужно знать, какой именно конструктор это сделает, достаточно просто сказать, что я хочу получить
Ответить с цитированием
  #3 (permalink)  
Старый 22.06.2012, 13:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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();
Ответить с цитированием
  #4 (permalink)  
Старый 22.06.2012, 14:00
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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();
Ответить с цитированием
  #5 (permalink)  
Старый 22.06.2012, 14:06
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

это синглтон)) вот с ним я разобрался, а теперь не могу нкиак догнать применимость в фабрики в проекте с бекбоном.

подскажите, пожалуйуста, всё ли я правилно понял в примере, который привел? конструкторами там являются backbone.view
Ответить с цитированием
  #6 (permalink)  
Старый 22.06.2012, 14:12
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 22.06.2012, 14:20
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

Сообщение от melky
что Вам именно нужно?
melky,
в проекте будут использоваться формы, причем их будет много (разный дизайн, разные правила валидации и наполнение).

одна форма — это будет одна модель и одна вью бекбон. а вот для построения должена использоваться фабрика.
Ответить с цитированием
  #8 (permalink)  
Старый 22.06.2012, 14:22
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 22.06.2012, 14:28
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

блин, опять всё сваливается в разговоры «ты не знаешь, я знаю, ты не прав, я прав». предлагаю не вестить на провокации, каждый думает в меру своего профессионализма)

я вот до сих пор не понимаю, каким образом применять фабрику в бекбоновом проекте) созадёт ли сам бекбон еще один уровень абстрации или нет. ведь с однйо стороны вью расширяют стандартный класс бекбона, с другой стороны вы приводите примеры фабрик «на самом примитивном уровне». видимо я совсем не пойму сути, поэтмоу очень прошу вас указать на хорошие источники, либо объяснить на конкретном примере (коде, который я привел).
Ответить с цитированием
  #10 (permalink)  
Старый 22.06.2012, 14:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от tadjik1 Посмотреть сообщение
melky,
в проекте будут использоваться формы, причем их будет много (разный дизайн, разные правила валидации и наполнение).

одна форма — это будет одна модель и одна вью бекбон. а вот для построения должена использоваться фабрика.
так ... а зачем нужна именно она, а не простой конструктор с прототипом?

Сообщение от tadjik1 Посмотреть сообщение
последние дни провожу в обнимку с книгой Стефанова «паттерны яваскрипт», в ней этот способ указан как «создание синглтона через экземпляр в замыкании»
там же есть описание паттерна "Фабрика" ... всё разжёвано до состояния жидкости.

Сообщение от Maxmaxmахimus
Ну так просвятиии меня) что я и прошу)) я же не хочу блуждать во тме невежества и лолжных представлений о чем -то ))) просвяти меня чтобы я узрел свет и истину про этот паттерн XD
не вопрос, чувак.
фабрика в javascript
читай

Сообщение от Maxmaxmахimus
зачем же он нужен)?? чтобы делать "стратегию" что ли?
а люди, для того, чтобы делать людей
нет, просто у этих двух есть общие черты.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Книга] Stoyan Stefanov, Javascript Patterns Dmitry A. Soshnikov Учебные материалы 20 13.08.2013 11:37
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34