Еще один паттерн из группы структурирующих, — декоратор. Его назначение в том чтобы возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом. Функциональность обязанностей реализуется в небольших объектах. Преимущество состоит в возможности динамически добавлять эту функциональность до или после основной функциональности объекта ConcreteComponent. Декоратор позволяет разгрузить приложение от классов с похожей функциональностью. Классический пример Декоратора, — это какой-нибудь класс, рисующий прямоугольник, с добавлением декораторов, которые рисуют рамки, заливают цветом или изображением. Причем, применение декоратора, рисующего рамку дважды, нарисует двойную рамку. На диаграмме Декоратор выглядит так: Пример реализации паттерна Декоратор: class …
Author: sheremetov
Следующий паттерн, – компоновщик (composite), тоже из группы структурирующих. Компоновщик организует объекты в древовидные структуры для представления иерархии часть-целое. Всевозможные иерархии деревьев страниц в каталогах, файлов в папках являются яркими представителями паттерна Компоновщик. Диаграмма для Компоновщика, выглядит так: Реализовывая Компоновщик, нужно помнить о том чтобы интерфейс Component был максимально дополнен используемыми публичными методами, избавляя клиента от приведения к типу или проверки существования метода (в случае скриптовых языков). Также? стоит сразу позаботиться о максимально удобном функционале для управления элементами (помимо стандартных …
Следующий патерн, также относится к типу структурных, и называется — мост. Смысл этого паттерна в том чтобы отделить абстракцию от реализации. В каком-то смысле он очень похож на адаптер, с той разницей что адаптер, «адаптирует» интерфейсы классов друг к другу, а мост, разделяет их, для того что бы сделать возможным изменение интерфейсов независимо от реализации. Вот как выглядит он выглядит на диаграмме: Этот патерн следует применять, например, когда нужно отвязать интерфейс от реализации во время выполнения. Мост повышает расширяемость, позволяя независимо расширять абстракции и реализации. Пример реализации паттарна Мост на Python: class SortAbstraction: def sortImpl(self, sortImpl): self._sortImpl = sortImpl …
Первый раз, мне в руки попала книга Дэвида Аллена задолго до того как это стало культовой и модной штукой. Как и все хорошие книги такого содержания, она совершила очередной «переворот в мозгах», — «как я жил раньше не организовывая и планируя каждый шаг», стучало в голове. Эта книга подталкивают вас к действиям, — но если ничего не предпринимать, суть этого знания начинает ускользать и забываться. Так случилось и со мной. Все же, желание повысить свою эффективность было довольно сильным, поэтому я вернулся к Дэвиду Аллену (надо сказать, не раз), перепробовал различные инструменты, и начал вырабатывать собственную систему, которая постепенно начинает работать для …
С недавнего времени, мы в команде завели такую практику как обмен опытом. Сначала мы пробовали просто готовить доклады, на всякого рода интересные темы касающиеся технологий, практик и подходов. Но, этот подход не совсем себя оправдал, и мы стали готовить небольшие доклады на заранее оговоренные темы, например, — паттерны проектирования. Идея состоит в том что мы выбираем несколько паттернов, делаем лаконичный пример использования, на каком-то языке не связанной с основной работой (php). Затем мы собираемся, показываем свои примеры, и обсуждаем конкретный паттерн и реализацию. Так у нас накопилось некоторое количество реализаций на Python, Ruby, Groovy. На самом деле, как мы потом убедились, выбор скриптового …
Google App Engine это платформа предлагаемая компанией Google для веб-разработчиков. Не будет преувеличением, сказать, что проблема роста и разумной экономии на масштабируемости и производительности стоит перед разработчиками с самого начала работы над проектом. С одной стороны, огромное количество стартапов, разработчики которых даже приблизительно не могут представить себе характер и объем нагрузок на сайт, а желая иметь некоторый запас производительности оптимизация, зачастую, начинается с первых строк кода. С другой стороны, надо сказать что приложения, которые должны легко масштабироваться имеют весьма сложную архитектуру внутри, и написание такого кода, тоже весьма специфично. Отдельо нужно упомянуть то, что …
По независящим от нас причинам упал сайт, спустя несколько часов только узнали об этом, поэтому было решено, для "быстрого реагирования", сделать мониторинг на локальном сервере, одна беда, он в интранете и почтового сервера на нем нет. В результате был сделан несложный скрипт, позволяющий отправлять отчеты о падении с любого доступного вам почтового адреса (gmail.com, mail.ru, yandex.ru). Поддерживается TLS авторизация для SMTP и HTTPS для протокола мониторинга.
Иногда проще один раз увидеть чем сто раз услышать, так и с Semantic Web. Речь пойдет о тех проектах которые встречались мне последнее время, и реализация и успех которых стали возможно именно благодаря rdf, owl, sparql и прочим прелестям семантического веба. Первый проект о котором стоит рассказать это freebase.com, своего рода википедия, построенная по канонам Semantic Web. Сложно даже назвать это проектом, — это целая платформа, позволяющая строить на ней свои приложения, прямо в броузере, используя довольно функциональную IDE: Разработчики отказались от использования SPARQL, в пользу более функционального, по их мнению, json-подобного собственного языка запросов. …
Это будет короткий пост об особенностях работы GarbageCollector (сборщик мусора), некоторые из которых были для меня новостью. Во-первых давайте напишем следующий код: import flash.display.Sprite; function onFrame(e: Event) { trace(System.totalMemory); var test = new Sprite(); } addEventListener(Event.ENTER_FRAME, onFrame) Запустив его вы убедитесь что плеер выделяет всё больше и больше памяти для себя, и спустя какое-то время, – начинает освобождать. То есть, память очищается не сразу же, как только на объект все ссылки удалены, а только через какое-то время. Графически это выглядит …
увлекательнейшая история про математика, подсмотрел у Constantiner’a В этом видео (английский, с русскими субтитрами) Ден Пинк, рассказывает о мотивации в духе классических евангелистов. Меня, проняло. Хорошая статья, полезная тем кто посматривает в сторону flex-разработки на Mate. Грант Скиннер, в простых словах говорит о том что беспокоится о преждевременной кончине Flash — себе нервы вредить. Не стоит. Делайте то — что любите. Используете то, что подходит больше для решения ваших задач.