Объектно-ориентированное проектирование, паттерны проектирования (Шаблоны)
March
2009
Сколько нужно потоков для обработки пользовательских запросов или крайности при использовании Singleton
Posted in: Java Web Design, J2EE, Java technologies, J2SE, Паттерны проектирования | 16 Comments
Более трех лет назад, когда я только перешел на Java, написал статью об использовании паттерна Singleton. Статья доступна по этой ссылке - Паттерн Singleton. Не смотря на прошествие значительного промежутка времени, статью до сих пор читают и комментируют. Меня заинтересовала одна ссылка из комментариев, в которой довольно неплохо рассказываются нюансы реализации паттерна Singleton.
В статье говорится о том, что следующая реализация с lazy инициализацией является не оптимальной при достаточно частом обращении к getInstance():
public final class Singleton {
private static Singleton _instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (_instance == null)
_instance = new Singleton();
return _instance;
}
}
Давайте попробуем определить, что же такое “достаточно часто”. Так же в статье я хочу показать Вам одну достаточно смешную реализацию Singleton, идею которой рассказал мне мой друг.
March
2008
По просьбам читателей очередную статью о паттернах проектирования посвящу паттерну Observer (Наблюдатель). Этот шаблон проектирования также известен под именами Dependents (Подчиненные) и Publisher-Subscriber (Издатель-Подписчик).
Реализация данного паттерна используется для наблюдения за состоянием объектов в системе. Если состояние объектов изменяется в процессе их жизненного цикла, то Наблюдатель оповещает другие части системы об этих событиях.
В данной статье я попытаюсь как можно проще и понятнее рассказать об этом паттерне и привести пример программного кода на Java, реализующего Observer.
(more…)
January
2008
В написанных ранее статьях мы уже рассматривали паттерны создания объектов (Creational Design Patterns).
Так как с необходимостью создания объектов програмисты встречаются каждый день, рассмотрим еще один паттерн - Prototype (Прототип).
Паттерн Prototype позволяет создавать новые объекты на основе некоторого объекта-прототипа при этом совсем не обязательно знать как необходимый объект устроен.
Вот некоторые ситуации когда может помочь этот паттерн проектирования:
- если создание объектов (через оператор new) занимает длительный промежуток времени или требовательно к памяти;
- если создание объектов для клиента является нетривиальной задачей, например, когда объект составной;
- избежать множества фабрик для создания конкретных экземпляров классов;
- если клиент не знает специфики создания объекта.
May
2007
Паттерн Adapter (Адаптер)
Posted in: Паттерны проектирования | 3 Comments
Вернемся к рассмотрению структурных паттернов проектирования. На этот раз мы рассмотрим шаблон проектирования под названием Adapter (его еще называют Wrapper на ряду с паттерном Facade).
Итак, паттерн Adapter используется для того, чтобы объекты с разными интерфейсами могли работать друг с другом. Существует два типа адаптеров - Class Adapter и Object Adapter.
Для начала мы рассмотрим каждый из этих типов, а потом я объясню разницу между двумя wrapper’ами - адаптером и фасадом.
(more…)
January
2007
Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделить процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же “технологический” процесс.
Паттерн Строитель иногда путают с паттерном проектирования Factory. И не удивительно, так как они действительно во многом схожи.
В этой статье я опишу небольшой пример реализации Builder’a на языке Java, а так же попробую коротко объяснить разницу между Builder и Factory.
(more…)
August
2006
Object-Oriented Design: решение задачи по проектированию
Posted in: Паттерны проектирования | 4 Comments
Есть такой сайт - http://www.topcoder.com.
Здесь проводятся онлайн и оффлайн соревнования по объектно-ориентированному проектированию и программированию (.NET и Java).
Более года назад мне тоже довелось участвовать в соревнованиях по проектированию. Результат довольно неплохой - четвертое место из более чем 30 участников. Это был мой первый опыт в ОО проектировании (OOD) и написании спецификаций (specification). А опытом нужно делиться…
(more…)
February
2006
Singleton Design Pattern in Java
Posted in: Java technologies (translated), Паттерны проектирования | 1 Comment
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…)
February
2006
Паттерн Memento (Память)
Posted in: Паттерны проектирования | 3 Comments
Поведенческий паттерн проектирования (behavioral pattern) Память нужен для хранения определенного состояния объекта. При сохранении не должна нарушаться парадигма ООП инкапсуляция. С другой стороны, должна присутствовать возможность возврата к предыдущему состоянию.
Ну, довольно сухих слов. Перейдем к практическому примеру паттерна Memento на Java.
(more…)
January
2006
Паттерн Abstract Factory (шаблон Абстрактная Фабрика на Java)
Posted in: Паттерны проектирования | 10 Comments
В предыдущей статье по проектированию был описан паттерн Factory Method. Как и было обещано, на этот раз мы рассмотрим шаблон проектирования под названием Abstract Factory.
Абстрактная фабрика предоставляет интерфейс для создания целых семейств объектов без указания конкретных классов. Объекты каждого семейства должны быть логически связаны между собой.
Перед тем, как привести пример использования Фабрики на Java, рассмотрим небольшую диаграмму классов (с Paint я творю чудеса :)):
(more…)
January
2006
Анти-паттерн проектирования (Java): интерфейс для констант
Posted in: Java technologies, J2SE, Паттерны проектирования | 23 Comments
Ошибка, которая будет описана в данной статье, иногда привлекает Java-программистов своей многообещающей простой (я знаю, о чем говорю, так как сам ее допускал).
При программировании очень часто приходится использовать константы. Константа, описанная в некотором классе, иногда может понадобится и в другом классе.
Если описать константу в интерфейсе, назовем его символично Unacceptable, то затем можно декларировать любой класс как реализующий (implements) этот интерфейс (interface) и использовать нашу полезную константу:
(more…)