Каковы примеры реализации шаблонов проектирования с использованием JavaScript?
-
09-06-2019 - |
Вопрос
Я программист средней квалификации, использующий JavaScript, но я не гуру.Я знаю, что с его помощью можно делать довольно мощные вещи, просто я не видел ничего, кроме довольно простых манипуляций с DOM.Мне интересно, могут ли люди привести несколько примеров традиционных концепций шаблонов проектирования, таких как Factory Method, Singleton и т. д., с использованием JavaScript.В каких случаях эти шаблоны будут использоваться в Интернете?
Решение
Я просто хотел добавить свой любимый шаблон JavaScript, который я узнал из шаблонов проектирования Pro JavaScript, которые уже рекомендовал Джонатан Раух.
Это шаблон Singleton пространства имен.По сути, вы создаете пространства имен с помощью синглтонов, которые позволяют скрывать методы и переменные от внешнего использования.Скрытые/открытые методы фактически скрыты, поскольку они определены внутри замыкания.
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
};
})();
Другие советы
Николай затронул эту тему, но шаблоны проектирования несовместимы между языками, которые имеют существенные различия.Я уже читал (и согласен с этим), что шаблон проектирования часто является признаком отсутствия функций в языке.
В качестве прекрасного примера можно привести шаблон «Фабрика», который совершенно не нужен в некоторых языках, в качестве примера я имею в виду 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: Основные шаблоны проектирования JavaScript для начинающих, том 1
@jamting:
Боже мой.У меня нет слов.
Для ОП:да, в каком-то смысле конечно можно, но некоторые закономерности, как ты к ним привык, не так заметны, как в Java.Например, синглтон будет просто объектом:
var singleton = {
sayHello: function() {
alert("Hello!")
}
};
В Википедии есть пример Фабрика в ДжС.
Я недавно использовал Лучший урок анимации Берни который широко использует Стратегия Шаблон проектирования.Берни отлично объясняет, почему следует использовать шаблон стратегии, но, к сожалению, не объясняет, как именно работает код.Опять же, при использовании справочника по шаблонам проектирования взгляните на код и комментарии в файле 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()
Как эта практика называется в JavaScript?
Это шаблон проектирования самовызова.Я никогда не видел этого, пока не начал писать Javascript.
Я подозреваю, что могут — вот пример синглтона:
Конечно, они могут.Вот книга на эту тему:
Профессиональные шаблоны проектирования JavaScript
Вот пример шаблона Фабрика:
Фабричный шаблон в Javascript
Я хотел бы добавить сюда то, что я изучил в группе, с обсуждением шаблонов проектирования как в C#, так и в JavaScript.Что мне особенно понравилось во время встречи, так это то, что парень, работающий с C#, пишет коды на JavaScript, и то же самое делает парень, работающий с JavaScript.После того, как я покидаю собрание, я стараюсь узнать больше дома и вести блог здесь.http://tech.wowkhmer.com/category/Design-Patterns.aspx как для C#, так и для JavaScript.
Слушать Джастину Диасу, рассказывающему о шаблонах проектирования для Javascript.Доклад также основан на его книге Pro Javascript Techniques, упомянутой выше.Доклад продлится около 45 минут на Google I/O.