Какие примеры реализации шаблонов проектирования с использованием JavaScript? - PullRequest
17 голосов
/ 24 августа 2008

Я довольно опытный программист, использующий JavaScript, но я не гуру. Я знаю, что вы можете делать с ним довольно мощные вещи, я просто не видел ничего, кроме довольно простых манипуляций с DOM. Мне интересно, могли бы люди привести примеры традиционных концепций шаблонов проектирования, таких как Factory Method, Singleton и т. Д. С использованием JavaScript. В каких случаях эти шаблоны будут использоваться в Интернете?

Ответы [ 10 ]

8 голосов
/ 24 августа 2008

Я просто хотел добавить свой любимый шаблон JavaScript, который я узнал из Pro JavaScript Design Patterns, который Джонатан Раух уже рекомендовал.

Это шаблон синглтона пространства имен. По сути, вы создаете пространства имен с помощью синглетонов, которые позволяют скрывать методы и переменные от внешнего использования. Скрытые / открытые методы на самом деле скрыты, потому что они определены в замыкании.

var com = window.com || {};
com.mynamespace = com.mynamespace || {};
com.mynamespace.newpackage = (function() {
    var myPrivateVariable = "hidden";
    var myPublicVariable = "exposed";

    function myPrivateMethod() {
        return "also hidden";
    }

    function myPublicMethod() {
        return "also exposed";
    }

    return {
        myPublicMethod: myPublicMethod,
        myPublicVariable: myPublicVariable
    };
})();
7 голосов
/ 24 августа 2008

Николай коснулся этого, но шаблоны проектирования не согласуются между языками, которые имеют существенные различия. Я уже читал (и согласен с), что шаблон проектирования часто является признаком отсутствия функций в языке.

В качестве идеального примера шаблон «Фабрика» совершенно не нужен в некоторых языках, например, Ruby в качестве примера, о котором я думаю (поскольку создание объектов - это просто метод в экземпляре Class):

# create a factory for MyObject
my_factory = MyObject
instance_1 = my_factory.new

# change the factory to another class
my_factory = MyOtherObject
instance_2 = my_factory.new

Всякий раз, когда вы применяете шаблон дизайна к языку, отличному от того, для которого он был изначально разработан, обязательно подумайте, действительно ли он ДЕЙСТВИТЕЛЬНО необходим, и каким образом вы сможете улучшить его с помощью новых доступных языковых функций. Шаблоны проектирования - это всего лишь руководство, вы всегда должны учитывать, действительно ли вам предназначение предназначено для этого шаблона, или же его можно лучше использовать в вашем случае.

3 голосов
/ 05 января 2012

Есть хорошая бесплатная онлайн книга Адди Османи, представляющая шаблоны проектирования Javascript: Основные шаблоны проектирования JavaScript для начинающих, Том 1

3 голосов
/ 24 августа 2008

@ jamting:

Шаблон проектирования синглтона в JavaScript

Боже мой. Я потерял дар речи.

К ОП: да, конечно, вы можете в некотором смысле, но некоторые шаблоны, к которым вы привыкли, не так заметны, как в Java. Например, синглтон будет просто объектом:

var singleton = {
    sayHello: function() {
       alert("Hello!")
    }
};

В Википедии есть пример Factory в JS.

2 голосов
/ 24 августа 2008

Я недавно использовал Класс лучшей анимации Берни , который широко использует Стратегию Шаблон проектирования. Берни прекрасно описывает, почему следует использовать шаблон стратегии, но, к сожалению, не объясняет, как именно работает код. Опять же, при использовании ссылки на шаблоны проектирования, посмотрите на код и комментарии в animator.js для хорошего примера использования шаблона стратегии.

Пример:

// This object controls the progress of the animation 
ex1 = new Animator();
// The Animator's subjects define its behaviour 
ex1.addSubject(updateButton);
function updateButton(value) {
    $('ex1Button').innerHTML = "Progress: " + Math.round(value * 100) + "%";
}

// now click below: each click to the button calls ex1.toggle()
1 голос
/ 22 декабря 2010

Как эта практика называется в JavaScript?

Это шаблон проектирования самовывозов. Я никогда не видел это, пока не начал Javascripting.

0 голосов
/ 27 апреля 2010

Слушайте Джастина Диаса, говорящего о шаблоне дизайна для Javascript. Доклад также основан на его книге Pro Javascript Techniques, упомянутой выше. Разговор длится около 45 минут в Google I / O

0 голосов
/ 27 ноября 2008

Я хотел бы добавить сюда то, что я изучал в группе с обсуждением шаблонов проектирования в C # и JavaScript. Во время встречи мне нравится то, что парень на C # пишет коды на JavaScript и то же самое на JavaScript. После того, как я покидаю собрание, я пытаюсь узнать больше дома и вести блог здесь http://tech.wowkhmer.com/category/Design-Patterns.aspx для C # и JavaScript.

0 голосов
/ 24 августа 2008

Конечно, они могут. Вот книга на эту тему:
Шаблоны проектирования Pro JavaScript
Вот пример шаблона Factory:
Фабричный шаблон в Javascript

0 голосов
/ 24 августа 2008

Я подозреваю, что они могут - вот пример Синглтона:

Шаблон проектирования синглтона в JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...