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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я подозреваю, что могут - вот пример синглтона:
Шаблон проектирования singleton в JavaScript
Вот так: web-beta.archive.org/web/20111008032921/http://kaijaeger.com /…
@jamting:
Боже ты мой. У меня нет слов.
To OP: да, в каком-то смысле, конечно, можно, но некоторые шаблоны, как вы к ним привыкли, не так заметны, как в Java. Например, singleton будет просто объектом:
var singleton = {
sayHello: function() {
alert("Hello!")
}
};
В Википедии есть пример Фабрика в JS.
Конечно, могут. Вот книга на эту тему:
Шаблоны проектирования Pro JavaScript
Вот пример паттерна Factory:
Заводской шаблон в Javascript
Николай коснулся этого вопроса, но шаблоны проектирования несовместимы между языками, которые сильно отличаются друг от друга. Я читал раньше (и согласен с этим), что шаблон проектирования часто является признаком отсутствия функций в языке.
В качестве прекрасного примера шаблон "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
Всякий раз, когда вы применяете шаблон проектирования к другому языку, чем он был изначально разработан, убедитесь, что вы учитываете, ДЕЙСТВИТЕЛЬНО ли он необходим и какими способами вы можете улучшить его с помощью новых доступных языковых функций. Шаблоны проектирования - это просто руководство, вы всегда должны учитывать, действительно ли этот шаблон нужен для предполагаемого использования или его можно лучше адаптировать в вашем случае.
Я просто хотел добавить свой любимый шаблон 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
};
})();
Стоит ли com.mynamespace.newpackage = (function () { ... }())? Просто любопытно, потому что JSLint жалуется. :)
@ Брайан М. Хант: Я всегда считал это таким, каким я его писал, но похоже, что ваш способ работает в Chrome и Firefox, хотя я не знаю об IE и других. Тем не менее, некоторые скобки необходимы, в противном случае скобки, применяющие функцию, сообщаются как синтаксические ошибки.
@Brian: Это действительно зависит от стиля, вы можете сделать это в любом случае.
Недавно я использовал Класс лучшей анимации Берни, который широко использует шаблон проектирования Стратегия. Берни отлично описывает, почему следует использовать шаблон стратегии, но, к сожалению, не объясняет, как именно работает код. Опять же, при использовании справочника по шаблонам проектирования взгляните на код и комментарии в 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()
Я хотел бы добавить сюда то, что я изучал как группа, с обсуждением шаблонов проектирования как на C#, так и на JavaScript. Во время встречи меня больше всего привлекало то, что программисты, работающие с C#, пишут коды на JavaScript, и то же самое для тех, кто занимается JavaScript. После того, как я ухожу с собрания, я стараюсь узнать больше дома и вести блог здесь http://tech.wowkhmer.com/category/Design-Patterns.aspx как для C#, так и для JavaScript.
Ссылка в ответ мертва.
Слушать Джастину Диазу говорит о шаблоне проектирования для Javascript. Доклад также основан на его книге «Pro Javascript Techniques», упомянутой выше. Речь длится около 45 минут на Google I / O.
Как эта практика называется в JavaScript?
Это шаблон проектирования с автоматическим вызовом. Я никогда не видел этого, пока не начал писать сценарии Javascript.
Есть хорошая онлайн-книга свободный Адди Османи, знакомящая с шаблонами проектирования Javascript: Основные шаблоны проектирования JavaScript для начинающих, Том 1
Он также упоминает здесь в своей книге.
Ссылка в ответ мертва.