Каковы некоторые примеры реализации шаблонов проектирования с использованием JavaScript?

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

Ответы

Ответ 1

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

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

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
    };
})();

Ответ 2

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

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

# 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

@jamting:

Шаблон дизайна singleton в JavaScript

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

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

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

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

Ответ 5

Недавно я использовал Bernie Better Animation Class, в котором широко используется Strategy Дизайн. Берни отлично справляется с описанием того, почему шаблон стратегии следует использовать, но, к сожалению, не объясняет, как именно работает код. Опять же, при использовании ссылки "Образцы рисунков" взгляните на код и комментарии в animator.js для хорошего примера использования шаблона стратегии.

Пример:

// This object controls the progress of the animation 
ex1 = new Animator();
// The Animator 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()

Ответ 9

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

Ответ 10

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