Объектно-ориентированное проектирование, паттерны проектирования (Шаблоны)




26
March

Паттерн Наблюдатель (Observer design pattern)

Posted in: Паттерны проектирования | 4 Comments

По просьбам читателей очередную статью о паттернах проектирования посвящу паттерну Observer (Наблюдатель). Этот шаблон проектирования также известен под именами Dependents (Подчиненные) и Publisher-Subscriber (Издатель-Подписчик).

Реализация данного паттерна используется для наблюдения за состоянием объектов в системе. Если состояние объектов изменяется в процессе их жизненного цикла, то Наблюдатель оповещает другие части системы об этих событиях.

В данной статье я попытаюсь как можно проще и понятнее рассказать об этом паттерне и привести пример программного кода на Java, реализующего Observer.
(more…)

19
January

Паттерн Прототип (Prototype Design Pattern)

Posted in: Паттерны проектирования | 8 Comments

В написанных ранее статьях мы уже рассматривали паттерны создания объектов (Creational Design Patterns).
Так как с необходимостью создания объектов програмисты встречаются каждый день, рассмотрим еще один паттерн - Prototype (Прототип).
Паттерн Prototype позволяет создавать новые объекты на основе некоторого объекта-прототипа при этом совсем не обязательно знать как необходимый объект устроен.
Вот некоторые ситуации когда может помочь этот паттерн проектирования:

  • если создание объектов (через оператор new) занимает длительный промежуток времени или требовательно к памяти;
  • если создание объектов для клиента является нетривиальной задачей, например, когда объект составной;
  • избежать множества фабрик для создания конкретных экземпляров классов;
  • если клиент не знает специфики создания объекта.

(more…)

21
May

Паттерн Adapter (Адаптер)

Posted in: Паттерны проектирования | 1 Comment

Вернемся к рассмотрению структурных паттернов проектирования. На этот раз мы рассмотрим шаблон проектирования под названием Adapter (его еще называют Wrapper на ряду с паттерном Facade).
Итак, паттерн Adapter используется для того, чтобы объекты с разными интерфейсами могли работать друг с другом. Существует два типа адаптеров - Class Adapter и Object Adapter.
Для начала мы рассмотрим каждый из этих типов, а потом я объясню разницу между двумя wrapper’ами - адаптером и фасадом.
(more…)

13
January

Паттерн Builder (Строитель)

Posted in: Паттерны проектирования | 5 Comments

Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделить процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же “технологический” процесс.
Паттерн Строитель иногда путают с паттерном проектирования Factory. И не удивительно, так как они действительно во многом схожи.
В этой статье я опишу небольшой пример реализации Builder’a на языке Java, а так же попробую коротко объяснить разницу между Builder и Factory.
(more…)

26
August

Object-Oriented Design: решение задачи по проектированию

Posted in: Паттерны проектирования | 2 Comments

Есть такой сайт - http://www.topcoder.com.
Здесь проводятся онлайн и оффлайн соревнования по объектно-ориентированному проектированию и программированию (.NET и Java).
Более года назад мне тоже довелось участвовать в соревнованиях по проектированию. Результат довольно неплохой - четвертое место из более чем 30 участников. Это был мой первый опыт в ОО проектировании (OOD) и написании спецификаций (specification). А опытом нужно делиться…
(more…)

28
February

Singleton Design Pattern in Java

Posted in: Java technologies (translated), Паттерны проектирования | No Comments

The Russian version of this article can be found here.
Design patterns are descriptions of problems and possible ways of their solving during object-oriented design (OOD).
Maybe the most popular design pattern is Singleton Pattern. It is used to guarantee that there will be only one instance of particular object in the application. The realization of this pattern can be useful while creating Connection Pool, Factory, Configuration Manager, etc.
In this article you will find basic description of this pattern and the example of its practical usage (in Java).
Look through the following code:
(more…)

22
February

Паттерн Memento (Память)

Posted in: Паттерны проектирования | 2 Comments

Поведенческий паттерн проектирования (behavioral pattern) Память нужен для хранения определенного состояния объекта. При сохранении не должна нарушаться парадигма ООП инкапсуляция. С другой стороны, должна присутствовать возможность возврата к предыдущему состоянию.
Ну, довольно сухих слов. Перейдем к практическому примеру паттерна Memento на Java.
(more…)

23
January

Паттерн Abstract Factory (шаблон Абстрактная Фабрика на Java)

Posted in: Паттерны проектирования | 4 Comments

В предыдущей статье по проектированию был описан паттерн Factory Method. Как и было обещано, на этот раз мы рассмотрим шаблон проектирования под названием Abstract Factory.
Абстрактная фабрика предоставляет интерфейс для создания целых семейств объектов без указания конкретных классов. Объекты каждого семейства должны быть логически связаны между собой.
Перед тем, как привести пример использования Фабрики на Java, рассмотрим небольшую диаграмму классов (с Paint я творю чудеса :)):
(more…)

10
January

Анти-паттерн проектирования (Java): интерфейс для констант

Posted in: Java technologies, J2SE, Паттерны проектирования | 17 Comments

Ошибка, которая будет описана в данной статье, иногда привлекает Java-программистов своей многообещающей простой (я знаю, о чем говорю, так как сам ее допускал).
При программировании очень часто приходится использовать константы. Константа, описанная в некотором классе, иногда может понадобится и в другом классе.
Если описать константу в интерфейсе, назовем его символично Unacceptable, то затем можно декларировать любой класс как реализующий (implements) этот интерфейс (interface) и использовать нашу полезную константу:
(more…)

30
December

Паттерн Factory Method (Фабрика)

Posted in: Паттерны проектирования | 11 Comments

Factory Method - это паттерн создания объектов (creational pattern). Данный шаблон проектирования предоставляет интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс инстанциировать. пными словами, Фабрика делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.
Паттерн проектирования Factory встречается очень часто. Рассмотрим небольшой пример на Java.
(more…)