Skip to content

Instantly share code, notes, and snippets.

View maplemap's full-sized avatar
🇺🇦

Serhiy Illarionov maplemap

🇺🇦
View GitHub Profile
@maplemap
maplemap / isElementInViewport.js
Last active January 25, 2018 08:56 — forked from davidtheclark/isElementInViewport.js
JavaScript: Is element in viewport?
/*
No jQuery necessary.
Thanks to Dan's StackOverflow answer for this:
http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
This solution was tested on IE7+, iOS5+ Safari, Android2+, Blackberry, Opera Mobile, and IE Mobile
*/
function isElementInViewport(el) {
var rect = el.getBoundingClientRect();
@maplemap
maplemap / pattern-visitor.js
Created July 19, 2020 09:26 — forked from DmitriiNazimov/pattern-visitor.js
[JS ES6 Паттерн ПОСЕТИТЕЛЬ (visitor)] #js #ES6 #ООП #Паттерны
/**
*
* ПАТТЕРН ПОСЕТИТЕЛЬ (visitor)
*
* ПОСЕТИТЕЛЬ — используется для расширения возможностей комбинации объектов, т.е. паттерн Посетитель позволяет
* добавлять объектам дополнительные операции, не изменяя их исходный код.
*
* Когда вам нужно выполнить какую-то операцию над всеми элементами сложной структуры объектов, например, деревом.
* Посетитель позволяет применять одну и ту же операцию к объектам различных классов. ИЛИ когда новое поведение имеет
* смысл только для некоторых классов из существующей иерархии.
@maplemap
maplemap / pattern-memento.js
Created July 19, 2020 09:26 — forked from DmitriiNazimov/pattern-memento.js
[JS ES6 Паттерн ХРАНИТЕЛЬ (memento)] #js #ES6 #ООП #Паттерны
/**
*
* ПАТТЕРН ХРАНИТЕЛЬ (memento)
*
* Паттерн ХРАНИТЕЛЬ (memento) - Паттерн Хранитель используется для реализации возврата к одному из предыдущих
* состояний (например, если пользователь выполнил команду «Отменить»).
* Хранитель – это объект, в котором сохраняется внутреннее состояния другого объекта – хозяина хранителя. Для работы
* механизма отката нужно, чтобы хозяин предоставил хранитель, когда возникнет необходимость записать контрольную точку
* состояния хозяина. Только хозяину разрешено помещать в хранитель информацию и извлекать ее оттуда, для других
* объектов хранитель непрозрачен.
@maplemap
maplemap / pattern-mediator.js
Created July 19, 2020 09:27 — forked from DmitriiNazimov/pattern-mediator.js
[JS ES6 Паттерн ПОСРЕДНИК (mediator) ] #js #ES6 #ООП #Паттерны
/**
*
* ПАТТЕРН ПОСРЕДНИК (mediator)
*
* Паттерн ПОСРЕДНИК (mediator) - это поведенческий паттерн проектирования, который позволяет уменьшить связанность
* множества классов между собой, благодаря перемещению этих связей в один класс-посредник.
* Паттерн Посредник используется для централизации сложных взаимодействий и управляющих операций между объектами.
* Один из модулей медиатора изменяет состояние -> оповещает об этом медиатор -> медиатор оповещает об этом другие
* модули, которым положено знать о случившемся.
* Довольно популярна реализация Посредника при помощи Наблюдателя. При этом объект посредника будет выступать
@maplemap
maplemap / pattern-flyweight.js
Created July 19, 2020 09:28 — forked from DmitriiNazimov/pattern-flyweight.js
[JS ES6 Паттерн ПРИСПОСОБЛЕНЕЦ/ЛЕГКОВЕС (Flyweight)] #js #ES6 #ООП #Паттерны
/**
*
* ПАТТЕРН ПРИСПОСОБЛЕНЕЦ/ЛЕГКОВЕС (Flyweight)
*
* Паттерн ПРИСПОСОБЛЕНЕЦ/ЛЕГКОВЕС - структурный шаблон проектирования, при котором объект, представляющий себя как
* уникальный экземпляр в разных местах программы, по факту не является таковым.
* Данный паттерн проектирования позволяет вместить большее количество объектов в отведённую оперативную память.
* Легковес экономит память, разделяя общее состояние объектов между собой, вместо хранения одинаковых данных в
* каждом объекте.
@maplemap
maplemap / pattern-bridge.js
Created July 19, 2020 09:28 — forked from DmitriiNazimov/pattern-bridge.js
[JS ES6 Паттерн МОСТ (bridge)] #js #ES6 #ООП #Паттерны
/**
*
* ПАТТЕРН МОСТ (bridge)
*
* Паттерн МОСТ - отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и
* другое. Это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные
* иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга.
* Например у нас есть класс Круг, и мы хотим создавать круги разного цвета, для этого нужно будет создать подклассы
* Синий Круг, Желтый круг и т.д. А если потом появятся квадраты и треугольники, то для них тоже нужно будет создавать
* большое количество подклассов. В итоге иерархия будет огромной. Логичнее создать две независимых иерархии -
@maplemap
maplemap / pattern-proxy.js
Created July 19, 2020 09:28 — forked from DmitriiNazimov/pattern-proxy.js
[JS ES6 Паттерн ЗАМЕСТИТЕЛЬ (proxy)] #js #ES6 #ООП Паттерны#
/**
*
* ПАТТЕРН ЗАМЕСТИТЕЛЬ (proxy)
* Предоставляет суррогатный объект, управляющий доступом к другому объекту.
*
* Заместитель это обертка, которая применяется в следующих случаях:
* 1. Ленивая инициализация (виртуальный прокси). Когда у вас есть тяжёлый объект,
* грузящий данные из файловой системы или базы данных.
* 2. Защита доступа (защищающий прокси). Когда в программе есть разные типы пользователей, и вам хочется
* защищать объект от неавторизованного доступа. Прокси может проверять доступ при каждом вызове и передавать
@maplemap
maplemap / pattern-state.js
Created July 19, 2020 09:29 — forked from DmitriiNazimov/pattern-state.js
[JS ES6 Паттерн СОСТОЯНИЕ (state)] #Паттерны #ООП #ES6 #js
/**
*
* ПАТТЕРН СОСТОЯНИЕ (state)
*
* Паттерн Состояние управляет изменением поведения объекта при изменении его внутреннего состояния.
* Внешне это выглядит так, словно объект меняет свой класс.
*
* Основная идея в том, что программа может находиться в одном из нескольких состояний, которые всё время сменяют друг
* друга. Набор этих состояний, а также переходов между ними, предопределён и конечен. Находясь в разных состояниях,
* программа может по-разному реагировать на одни и те же события, которые происходят с ней.
@maplemap
maplemap / pattern-composite.js
Created July 19, 2020 09:29 — forked from DmitriiNazimov/pattern-composite.js
[JS ES6 Паттерн КОМПОНОВЩИК (composite)] #Паттерны #ООП #ES6 #js
/**
*
* ПАТТЕРН КОМПОНОВЩИК (composite)
*
* Шаблон Компоновщик позволяет единообразно обрабатывать отдельные объекты и их группы. Он работает с иерархией «часть-целое».
* Паттерн Компоновщик позволяет создавать древовидные структуры, узлами которых являются как комбинации, так и
* отдельные объекты.
* ВАЖНО: в такой структуре одни и те же операции могут применяться и к комбинациям, и к отдельным объектам.
*
@maplemap
maplemap / pattern-iterator.js
Created July 19, 2020 09:29 — forked from DmitriiNazimov/pattern-iterator.js
[JS ES6 Паттерн ИТЕРАТОР (iterator)] #Паттерны #ООП #js #ES6
/**
*
* ПАТТЕРН ИТЕРАТОР
*
Iterator — поведенческий шаблон проектирования. Представляет собой объект, позволяющий получить последовательный
доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.
Например, такие элементы как дерево, связанный список, хеш-таблица и массив могут быть пролистаны (и модифицированы)
с помощью объекта Итератор.