On Github sergeylaptev / js-patterns-slides
В общем случае слово «паттерн» – это широко- используемый вариант решения часто повторяющихся задач
Важно уметь выделять шаблоны, потому что:
Конструктор, Фабрика, Прототип, Одиночка, Модуль и тд.
Декоратор, Фасад, Прокси и тд.
Наблюдатель, Паттерн цепочек и тд.
var myModule = { myProperty: "someValue", myConfig: { useCaching: true, language: "ru" }, myMethod: function () { console.log( "Сообщение, которое выводит метод myMethod" ); }, myMethod2: function () { console.log( "Язык сайта:" + this.myConfig.language); } getMyProperty: function() { console.log( this.myProperty ); } };
// Выведет: Сообщение, которое выводит метод myMethod myModule.myMethod(); // Выведет: Язык сайта: ru myModule.myMethod2(); // Выведет: someValue myModule.getMyProperty();
var testModule = (function () { var counter = 0; return { incrementCounter: function () { return counter++; }, resetCounter: function () { console.log( "Значение счетчика до сброса: " + counter ); counter = 0; } }; })();
// Увеличиваем значение счетчика на единицу testModule.incrementCounter(); // Проверяем значение и обнуляем // Вывод: Значение счетчика до сброса1 testModule.resetCounter();
function Vehicle( vehicleType ){ this.vehicleType = vehicleType || "Лодка"; this.model = "стандартная"; this.sign = "П-123-21"; } var testInstance = new Vehicle( "Авто" ); console.log( testInstance ); var truck = new Vehicle( "Грузовик" ); truck.setModel = function( modelName ){ this.model = modelName; }; truck.setColor = function( color ){ this.color = color; }; truck.setModel( "MAN" ); truck.setColor( "Синий" ); console.log( truck ); var secondInstance = new Vehicle( "Авто" ); console.log( secondInstance );
var PubSub = function() {}; PubSub.prototype.subscribe = function(topic, callback, context) { context = context || this; this._topics = this._topics || {}; this._topics[topic] = this._topics.topic || []; this._topics[topic].push({ "context": context, "callback" : callback }); }; PubSub.prototype.publish = function(topic) { this._topics[topic].forEach(function(subscription) { subscription.callback.call(subscription.context); }); }; PubSub.prototype.addTag = function(tag) { this._tags = this._tags || []; this._tags.push(tag); this.publish && this.publish("tag:added"); }; var object = new PubSub(); object.subscribe("tag:added", function() { console.log('Тег добавлен'); }); object.addTag("Тест"); object.addTag("Крутой тег");
На самом деле существует более ста видов паттернов, нет необходимости знать их все. Достаточно изучить несколько основных (например те, что я Вам сегодня показал). Если перед Вами будет стоять нетривиальная задача, то можно легко найти необходимый конкретно вам паттерн!