Каковы некоторые примеры реализации шаблонов проектирования с использованием 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.
Ответ 4
Там хорошая бесплатная онлайн-книга Адди Османи, представляющая шаблоны дизайна Javascript: Основные шаблоны проектирования JavaScript для новичков, том 1
Ответ 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()
Ответ 6
Какова эта практика, называемая в JavaScript?
Это шаблон дизайна самозапуска. Я никогда не видел его, пока не начал Javascripting.
Ответ 7
Я подозреваю, что они могут - вот пример Singleton:
Шаблон дизайна singleton в JavaScript
Ответ 8
Конечно, они могут. Вот книга на эту тему:
Шаблоны проектирования JavaScript
Вот пример шаблона Factory:
Factory шаблон в Javascript
Ответ 9
Я хотел бы добавить здесь, что я изучил как группу с обсуждением шаблонов проектирования как на С#, так и на JavaScript. Какая причудливая вещь для меня во время встречи - это то, что парень С# пишет коды в JavaScript и то же самое для парня JavaScript.
После того, как я покинул собрание, я стараюсь больше учиться дома и вести блоги здесь
http://tech.wowkhmer.com/category/Design-Patterns.aspx как для С#, так и для JavaScript.
Ответ 10
Слушайте, чтобы Джастин Диаз говорил о шаблоне дизайна для Javascript. Разговор также основан на его книге Pro Javascript Techniques, о которой говорилось выше. Разговор составляет около 45 минут при Google I/O