SlideShare a Scribd company logo
1 of 6
Абстрактная фабрика - Предоставляет интерфейс для создания
            Порождающие шаблоны                                  семейств взаимосвязанных или взаимозависимых объектов, не
               проектирования                                    специфицируя их конкретных классов
                                                                 скрыть способ создания объекта
Factory Method/Фабричный метод - Определяет интерфейс для                a. скрыть действительный класс создания объекта
создания объекта, но оставляет подклассам решение о том, какой           b. создать множество совместно используемых объектов.
класс инстанциировать. Фабричный метод позволяет классу                  c. Получить возможность использования различных
делегировать создание подклассам. Используется, когда:                      версий реализации классов.
        a. классу заранее неизвестно, объекты каких подклассов
           ему нужно создавать.
        b. класс спроектирован так, чтобы объекты, которые он
           создаёт, специфицировались подклассами.
        c. класс делегирует свои обязанности одному из
           нескольких вспомогательных подклассов, и
           планируется локализовать знание о том, какой класс
           принимает эти обязанности на себя.
Builder - отделяет конструирование сложного объекта от его
Singleton - Гарантирует, что у класса есть только один экземпляр, и представления, так что в результате одного и того же процесса
предоставляет к нему глобальную точку доступа                       конструирования могут получаться разные представления.
   a. контролируемый доступ к единственному экземпляру;                a. позволяет изменять внутреннее представление продукта;
   b. уменьшение числа имён;                                           b. изолирует код, реализующий конструирование и
   c. допускает уточнение операций и представления;                       представление;
   d. допускает переменное число экземпляров;                          c. дает более тонкий контроль над процессом конструирования.
   e. большая гибкость, чем у операций класса.

public class MySingleton {                                            Применение
  private static final MySingleton ourInstance = new MySingleton();   алгоритм создания сложного объекта не должен зависеть от того, из
                                                                      каких частей состоит объект и как они стыкуются между собой;
    private MySingleton () {                                          процесс конструирования должен обеспечивать различные
    }                                                                 представления конструируемого объекта.

    public synchronized static final MySingleton getInstance() {
      return ourInstance;
    }
}
Структурные шаблоны                                              Proxy
                                                                 Задача Контроль над доступом к объекту.
Adapter - это объект который изменяет интерфейс другого объекта. Решение: создать объект, который прозрачно управляет доступом к
(структурный шаблон проектирования, предназначенный для          другому объекту.
организации использования функций объекта, недоступного для      Последствия; Возникает новый посредник при доступе к объекту.
модификации, через специально созданный интерфейс.)




  a. инкапсуляция реализации внешних классов (компонентов,
     библиотек), система становится независимой от интерфейса
     внешних классов;
  b. переход на использование других внешних классов не
     требует переделки самой системы, достаточно реализовать
     один класс Adapter
ConcreteObservable - конкретный класс, который реализует
           Шаблоны поведения (Behavioral patterns)                  интерфейс Observable.
Iterator                                                            ConcreteObserver - конкретный класс, который реализует интерфейс
Задача. Перебор элементов коллекции вне зависимости от его          Observer.
реализации.                                                         Область применения
Решение. Создать объект, который занимается деталями перебора, -
последние прячутся от пользователя
Последствия: Развязка обхода, упрощение интерфейса коллекции,
инкапсуляция логики перебора.
First()
Next()
isDone()
currentItem()

Visitor
Задача разделение алгоритма от структуры объекта.
Идея в том что бы использовать структуру классов, каждый из
которых имел бы метод accept() который принимает объект visitor в
качестве аргумента.. Visitor это интерфейс который имеет метод
visit() для каждого элемента класса. accept() метод каждого
элемента, выполняет обратный вызов visit() своего класса.
Observer                                                            Шаблон «наблюдатель» применяется в тех случаях, когда система
Определяет зависимость типа «один ко многим» между объектами        обладает следующими свойствами:
таким образом, что при изменении состояния одного объекта все       существует, как минимум, один объект, рассылающий сообщения
зависящие от него оповещаются об этом событии.                      имеется не менее одного получателя сообщений, причём их
Observable - интерфейс, определяющий методы для добавления,         количество и состав могут изменяться во время работы
удаления и оповещения наблюдателей.                                 приложения. Данный шаблон часто применяют в ситуациях, в
Observer - интерфейс, с помощью которого наблюдаемый объект         которых отправителя сообщений не интересует, что делают с
оповещает наблюдателей.                                             предоставленной им информацией получатели.
Resign Patterns                                                                              2. Бесструктурные паттерны
Скакунов Александр                                                                           Ниже представлен список из семи бесструктурных паттернов.
Опубликовано 14.02.2007 в Статьи, Юмор, Разработка
Проломы проектно-дизориентированного проектирования                                          2.1. Усыновитель (Adopter)
                                                                                             Усыновитель даёт кров функциям-беспризорникам. В результате получается семейство
Вступление                                                                                   функций, не похожих одна на другую и связанных между собой только через Усыновителя.
Любой, кто знаком с книгой о паттернах, написанной той самой Бандой Четырёх, знает, что
паттерны, указанные там, представляют собой изящные решения, выработанные годами. К          2.2. Бригада (Brig)
сожалению, извлечь паттерны из имеющегося кода не представляется возможным, потому что       Бригада - контейнерный класс для кривого ПО. Также известно под названием модуль.
авторы этого кода не знали, что они должны были использовать паттерны. Сей труд - собрание
паттернов для народа. Паттерны, указанные здесь, представляют собой решения,                 2.3. Компромисс (Compromise)
выдержавшие испытание временем. Желаю вам приятного чтения, но пожалуйста, не                Паттерн Компромисс используется для создания баланса между сроками разработки и
вздумайте ими пользоваться!                                                                  качеством продукта. В результате получается посредственное приложение - и всё равно с
                                                                                             опозданием.
1. Умерщвляющие паттерны
Ниже представлен список из пяти умерщвляющих паттерна.                                       2.4. Детонатор (Detonator)
                                                                                             Детонатор очень распространён, но часто остаётся незамеченным. Простой пример -
1.1. Крайняя Нищета (Abject Poverty)                                                         вычисления по последним двум цифрам года. Детонатор где-то рядом, и только и ждёт, чтобы
Паттерн Крайняя Нищета широко встречается в программах, которые настолько трудно             взорваться!
тестировать и поддерживать, что это выливается в постоянные превышения бюджета.
                                                                                             2.5. Сыр (Fromage)
1.2. Ослепитель (Blinder)                                                                    Паттерн Сыр - полон дыр. Этот паттерн состоит из мелких убогих фокусов, которые в итоге
Этот паттерн - подходящее решение для проблемы без учёта возможных изменений исходных        сводят на нет переносимость приложения. Чем старше Сыр, тем лучше “пахнет”.
требований. До конца неясным остаётся, назван ли этот паттерн так потому, что инженер
надевает шоры во время фазы кодирования, либо потому, что можно сломать глаза во время       2.6. Мухоловка (Flypaper)
эксплуатации такого ПО.                                                                      Паттерн Мухоловка написан одним инженером и поддерживается другим. Инженер,
                                                                                             поддерживающий Мухоловку, вскоре обнаруживает, что вляпался, и он скорее погибнет, чем
1.3. Обманчивый Метод (Fallacy Method)                                                       выпутается.
Паттерн Обманчивый Метод характеризует обработку исключительных ситуаций. Логика
выглядит стройной, но если кто-либо побеспокоиться протестировать приложение либо            2.7. Эпоксидка (ePoxy)
наступит исключительная ситуация, вся обманчивость этой логики вылезает наружу.              Эпоксидка встречается в сильно связанных между собой модулях. Чем больше связь между
                                                                                             ними, тем более заметным становится слой Эпоксидки промеж них.
1.4. Пробатип (ProtoTry)
Паттерн Пробатип - попытка разработать работающую модель приложения на скорую руку.          3. Паттерны плохого поведения
Естественное желание - переписать Пробатип, учитывая полученные из него уроки, однако        Ниже представлен список из одиннадцати паттернов плохого поведения.
сроки поджимают. Пробатип также известен как имеющийся код (legacy code).
                                                                                        3.1. Цепочка Возможностей (Chain of Possibilities)
1.5. Симплтон (Simpleton)                                                               Цепочка Возможностей встречается в больших, плохо документированных модулях. Никто не
Симплтон - это жутко навороченный паттерн, используемый для решения самых примитивных знает вообще всей функциональности такого модуля, однако его возможности кажутся
задач. Он является точным показателем профессионального уровня тех, кто его использует. бескрайними. Также известен как Недетерминированный.
3.2. Коммандос (Commando)
Коммандос используется, чтобы быстро ворваться в работу и также быстро её сделать.   3.11. Гость Из Преисподней (Visitor From Hell)
Коммандос может нарушить инкапсуляцию для успешного выполнения своей миссии. Девиз - Паттерн Гость Из Преисподней сродни отсутствию проверки на выход за границы массива во
пленных не брать.                                                                    время выполнения. По крайней мере один контрольный цикл для системы неизбежно вызовет
                                                                                     Гостя Из Преисподней, который обязательно затрёт жизненно важные данные.
3.3. Распылитель (Intersperser)
Распылитель рассеивает частички функциональности по всей системе, препятствуя
тестированию, поддержке или пониманию любой из функций.                              Шаблоны это.
                                                                                           1. Проекты многократного использования.
3.4. Подстрекатель (Instigator)
Подстрекатель на первый взгляд белый и пушистый, но на самом деле сеет разрушение и хаос
                                                                                           2. Абстрактные решения общих проблем проектирования.
в других частях системы.                                                                   3. Решения часто возникающих задач.
                                                                                           4. Решение задач одного типа.
3.5. Импульс (Momentum)                                                                  Шаблоны не являются:
Импульс растёт экспоненциально, увеличивая требования к памяти и месту на диске, а также   1. Решением конкретной задачи.
сложность приложения и его время выполнения.
                                                                                           2. Волшебны средством решения всех задач
3.6. Лекарь (Medicator)                                                                    3. Конкретными классами, библиотеками, готовыми решениями.
Лекарь - настоящия пожиратель времени, при этом остальные части системы приходиться
буквально откачивать и давать успокоительное.                                           Плюс упомянуть об антипатернах
                                                                                        1.Шаблоны создания(Creational patterns)
3.7. Не-Виноватая-Я (Absolver)
Паттерн Не-Виноватая-Я встречается в коде, написанном бывшими сотрудниками компании.
                                                                                         1.Abstract Factory
Так много старых проблем заключено в таком коде, что теперешние сотрудники могут         2.Singleton
защитить свои наработки от обвинений, утверждая, что именно чужой код - причина всех     4.Builder
возникающих ошибок. Также известен под именем Это-Не-Моя-Правка.                        2.Структурные шаблоны (Structural patterns)
                                                                                         1.Adapter
3.8. Вклад (Stake)
                                                                                         2.Proxy
Паттерн Вклад имеет место в приложениях, созданных инженерами, которые впоследствии
получили продвижение по службе. Несмотря на изобилие ошибок в программе, вклад этого    3.Шаблоны поведения (Behavioral patterns)
инженера слишком велик, чтобы позволить кому-либо начать переписывать этот код, т.к. он  1.Iterator
является апофеозом технических достижений этого товарища.                                2.Visitor
                                                                                         3.Observer
3.9. Хвалебная Речь (Eulogy)
Паттерн Хвалебная Речь применяется во всех проектах, которые уже используют остальные 22
паттерна. Также известен как Посмертная Речь.                                            Плюс упомянуть об антипатернах

3.10. Авральный Метод (Tempest Method)                                                     1.God object
Авральный Метод применяется в последние несколько дней перед сдачей проекта. Данный        2.Magic numbers
паттерн характеризуется недостатком комментариев и многократным использованием
паттерна Детонатор.

More Related Content

What's hot

Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Dima Dzuba
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ITMO University
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3Technopark
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построенияGennady Zavyalov
 
Programming Guide
Programming GuideProgramming Guide
Programming Guideguest63e09c
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. ПеречисленияюUnguryan Vitaliy
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 

What's hot (15)

Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
 
Programming Guide
Programming GuideProgramming Guide
Programming Guide
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
PVS-Studio
PVS-Studio PVS-Studio
PVS-Studio
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 

Viewers also liked

Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Technopark
 
Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Alex Mamonchik
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 

Viewers also liked (7)

Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7Разработка веб-сервисов осень 2013 лекция 7
Разработка веб-сервисов осень 2013 лекция 7
 
Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1Шаблоны проектирования. часть 1
Шаблоны проектирования. часть 1
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 

Similar to шаблоны проектирования

Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASPdevel123
 
Gang of four review.Structural patterns
Gang of four review.Structural patternsGang of four review.Structural patterns
Gang of four review.Structural patternsMykyta Hopkalo
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaLohika_Odessa_TechTalks
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model LibraryAndrey Gordienkov
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVCmandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 

Similar to шаблоны проектирования (20)

Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
 
Gang of four review.Structural patterns
Gang of four review.Structural patternsGang of four review.Structural patterns
Gang of four review.Structural patterns
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
JavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia RedunovaJavaScript Design Patterns overview by Ksenia Redunova
JavaScript Design Patterns overview by Ksenia Redunova
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
PostSharp - Threading Model
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 

шаблоны проектирования

  • 1. Абстрактная фабрика - Предоставляет интерфейс для создания Порождающие шаблоны семейств взаимосвязанных или взаимозависимых объектов, не проектирования специфицируя их конкретных классов скрыть способ создания объекта Factory Method/Фабричный метод - Определяет интерфейс для a. скрыть действительный класс создания объекта создания объекта, но оставляет подклассам решение о том, какой b. создать множество совместно используемых объектов. класс инстанциировать. Фабричный метод позволяет классу c. Получить возможность использования различных делегировать создание подклассам. Используется, когда: версий реализации классов. a. классу заранее неизвестно, объекты каких подклассов ему нужно создавать. b. класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами. c. класс делегирует свои обязанности одному из нескольких вспомогательных подклассов, и планируется локализовать знание о том, какой класс принимает эти обязанности на себя.
  • 2. Builder - отделяет конструирование сложного объекта от его Singleton - Гарантирует, что у класса есть только один экземпляр, и представления, так что в результате одного и того же процесса предоставляет к нему глобальную точку доступа конструирования могут получаться разные представления. a. контролируемый доступ к единственному экземпляру; a. позволяет изменять внутреннее представление продукта; b. уменьшение числа имён; b. изолирует код, реализующий конструирование и c. допускает уточнение операций и представления; представление; d. допускает переменное число экземпляров; c. дает более тонкий контроль над процессом конструирования. e. большая гибкость, чем у операций класса. public class MySingleton { Применение private static final MySingleton ourInstance = new MySingleton(); алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой; private MySingleton () { процесс конструирования должен обеспечивать различные } представления конструируемого объекта. public synchronized static final MySingleton getInstance() { return ourInstance; } }
  • 3. Структурные шаблоны Proxy Задача Контроль над доступом к объекту. Adapter - это объект который изменяет интерфейс другого объекта. Решение: создать объект, который прозрачно управляет доступом к (структурный шаблон проектирования, предназначенный для другому объекту. организации использования функций объекта, недоступного для Последствия; Возникает новый посредник при доступе к объекту. модификации, через специально созданный интерфейс.) a. инкапсуляция реализации внешних классов (компонентов, библиотек), система становится независимой от интерфейса внешних классов; b. переход на использование других внешних классов не требует переделки самой системы, достаточно реализовать один класс Adapter
  • 4. ConcreteObservable - конкретный класс, который реализует Шаблоны поведения (Behavioral patterns) интерфейс Observable. Iterator ConcreteObserver - конкретный класс, который реализует интерфейс Задача. Перебор элементов коллекции вне зависимости от его Observer. реализации. Область применения Решение. Создать объект, который занимается деталями перебора, - последние прячутся от пользователя Последствия: Развязка обхода, упрощение интерфейса коллекции, инкапсуляция логики перебора. First() Next() isDone() currentItem() Visitor Задача разделение алгоритма от структуры объекта. Идея в том что бы использовать структуру классов, каждый из которых имел бы метод accept() который принимает объект visitor в качестве аргумента.. Visitor это интерфейс который имеет метод visit() для каждого элемента класса. accept() метод каждого элемента, выполняет обратный вызов visit() своего класса. Observer Шаблон «наблюдатель» применяется в тех случаях, когда система Определяет зависимость типа «один ко многим» между объектами обладает следующими свойствами: таким образом, что при изменении состояния одного объекта все существует, как минимум, один объект, рассылающий сообщения зависящие от него оповещаются об этом событии. имеется не менее одного получателя сообщений, причём их Observable - интерфейс, определяющий методы для добавления, количество и состав могут изменяться во время работы удаления и оповещения наблюдателей. приложения. Данный шаблон часто применяют в ситуациях, в Observer - интерфейс, с помощью которого наблюдаемый объект которых отправителя сообщений не интересует, что делают с оповещает наблюдателей. предоставленной им информацией получатели.
  • 5. Resign Patterns 2. Бесструктурные паттерны Скакунов Александр Ниже представлен список из семи бесструктурных паттернов. Опубликовано 14.02.2007 в Статьи, Юмор, Разработка Проломы проектно-дизориентированного проектирования 2.1. Усыновитель (Adopter) Усыновитель даёт кров функциям-беспризорникам. В результате получается семейство Вступление функций, не похожих одна на другую и связанных между собой только через Усыновителя. Любой, кто знаком с книгой о паттернах, написанной той самой Бандой Четырёх, знает, что паттерны, указанные там, представляют собой изящные решения, выработанные годами. К 2.2. Бригада (Brig) сожалению, извлечь паттерны из имеющегося кода не представляется возможным, потому что Бригада - контейнерный класс для кривого ПО. Также известно под названием модуль. авторы этого кода не знали, что они должны были использовать паттерны. Сей труд - собрание паттернов для народа. Паттерны, указанные здесь, представляют собой решения, 2.3. Компромисс (Compromise) выдержавшие испытание временем. Желаю вам приятного чтения, но пожалуйста, не Паттерн Компромисс используется для создания баланса между сроками разработки и вздумайте ими пользоваться! качеством продукта. В результате получается посредственное приложение - и всё равно с опозданием. 1. Умерщвляющие паттерны Ниже представлен список из пяти умерщвляющих паттерна. 2.4. Детонатор (Detonator) Детонатор очень распространён, но часто остаётся незамеченным. Простой пример - 1.1. Крайняя Нищета (Abject Poverty) вычисления по последним двум цифрам года. Детонатор где-то рядом, и только и ждёт, чтобы Паттерн Крайняя Нищета широко встречается в программах, которые настолько трудно взорваться! тестировать и поддерживать, что это выливается в постоянные превышения бюджета. 2.5. Сыр (Fromage) 1.2. Ослепитель (Blinder) Паттерн Сыр - полон дыр. Этот паттерн состоит из мелких убогих фокусов, которые в итоге Этот паттерн - подходящее решение для проблемы без учёта возможных изменений исходных сводят на нет переносимость приложения. Чем старше Сыр, тем лучше “пахнет”. требований. До конца неясным остаётся, назван ли этот паттерн так потому, что инженер надевает шоры во время фазы кодирования, либо потому, что можно сломать глаза во время 2.6. Мухоловка (Flypaper) эксплуатации такого ПО. Паттерн Мухоловка написан одним инженером и поддерживается другим. Инженер, поддерживающий Мухоловку, вскоре обнаруживает, что вляпался, и он скорее погибнет, чем 1.3. Обманчивый Метод (Fallacy Method) выпутается. Паттерн Обманчивый Метод характеризует обработку исключительных ситуаций. Логика выглядит стройной, но если кто-либо побеспокоиться протестировать приложение либо 2.7. Эпоксидка (ePoxy) наступит исключительная ситуация, вся обманчивость этой логики вылезает наружу. Эпоксидка встречается в сильно связанных между собой модулях. Чем больше связь между ними, тем более заметным становится слой Эпоксидки промеж них. 1.4. Пробатип (ProtoTry) Паттерн Пробатип - попытка разработать работающую модель приложения на скорую руку. 3. Паттерны плохого поведения Естественное желание - переписать Пробатип, учитывая полученные из него уроки, однако Ниже представлен список из одиннадцати паттернов плохого поведения. сроки поджимают. Пробатип также известен как имеющийся код (legacy code). 3.1. Цепочка Возможностей (Chain of Possibilities) 1.5. Симплтон (Simpleton) Цепочка Возможностей встречается в больших, плохо документированных модулях. Никто не Симплтон - это жутко навороченный паттерн, используемый для решения самых примитивных знает вообще всей функциональности такого модуля, однако его возможности кажутся задач. Он является точным показателем профессионального уровня тех, кто его использует. бескрайними. Также известен как Недетерминированный.
  • 6. 3.2. Коммандос (Commando) Коммандос используется, чтобы быстро ворваться в работу и также быстро её сделать. 3.11. Гость Из Преисподней (Visitor From Hell) Коммандос может нарушить инкапсуляцию для успешного выполнения своей миссии. Девиз - Паттерн Гость Из Преисподней сродни отсутствию проверки на выход за границы массива во пленных не брать. время выполнения. По крайней мере один контрольный цикл для системы неизбежно вызовет Гостя Из Преисподней, который обязательно затрёт жизненно важные данные. 3.3. Распылитель (Intersperser) Распылитель рассеивает частички функциональности по всей системе, препятствуя тестированию, поддержке или пониманию любой из функций. Шаблоны это. 1. Проекты многократного использования. 3.4. Подстрекатель (Instigator) Подстрекатель на первый взгляд белый и пушистый, но на самом деле сеет разрушение и хаос 2. Абстрактные решения общих проблем проектирования. в других частях системы. 3. Решения часто возникающих задач. 4. Решение задач одного типа. 3.5. Импульс (Momentum) Шаблоны не являются: Импульс растёт экспоненциально, увеличивая требования к памяти и месту на диске, а также 1. Решением конкретной задачи. сложность приложения и его время выполнения. 2. Волшебны средством решения всех задач 3.6. Лекарь (Medicator) 3. Конкретными классами, библиотеками, готовыми решениями. Лекарь - настоящия пожиратель времени, при этом остальные части системы приходиться буквально откачивать и давать успокоительное. Плюс упомянуть об антипатернах 1.Шаблоны создания(Creational patterns) 3.7. Не-Виноватая-Я (Absolver) Паттерн Не-Виноватая-Я встречается в коде, написанном бывшими сотрудниками компании. 1.Abstract Factory Так много старых проблем заключено в таком коде, что теперешние сотрудники могут 2.Singleton защитить свои наработки от обвинений, утверждая, что именно чужой код - причина всех 4.Builder возникающих ошибок. Также известен под именем Это-Не-Моя-Правка. 2.Структурные шаблоны (Structural patterns) 1.Adapter 3.8. Вклад (Stake) 2.Proxy Паттерн Вклад имеет место в приложениях, созданных инженерами, которые впоследствии получили продвижение по службе. Несмотря на изобилие ошибок в программе, вклад этого 3.Шаблоны поведения (Behavioral patterns) инженера слишком велик, чтобы позволить кому-либо начать переписывать этот код, т.к. он 1.Iterator является апофеозом технических достижений этого товарища. 2.Visitor 3.Observer 3.9. Хвалебная Речь (Eulogy) Паттерн Хвалебная Речь применяется во всех проектах, которые уже используют остальные 22 паттерна. Также известен как Посмертная Речь. Плюс упомянуть об антипатернах 3.10. Авральный Метод (Tempest Method) 1.God object Авральный Метод применяется в последние несколько дней перед сдачей проекта. Данный 2.Magic numbers паттерн характеризуется недостатком комментариев и многократным использованием паттерна Детонатор.