Архив

Архив раздела ‘Шаблоны проектирования’

Immutable (Неизменяемый)

19 Апрель 2010 Vitaliy Juravskiy 38 View Comments

Данный шаблон используется другими шаблонами и является основным, потому что он повышает надежность и управляемость кода, за счет наложения запрета на изменение содержимого объекта класса, реализующего данный шаблон. При этом уменьшаются затраты на совместный доступ к объекту, потому как нет необходимости в синхронизации потоков. Данный шаблон используется или может использоваться многими другими шаблонами проектирования, например объекты значений (Value objects).

Реализация шаблона проста, в конструктор передаются значения, которые определяют неизменяемое содержимое класса, а также существует набор get-методов, которые позволяют получить данные значения. Set-методы, предназначенные для изменения данных отсутствуют.

Пример кода демонстрирующий данный шаблон проектирования:

Читать далее...

Interface and Abstract Class (Интерфейс и абстрактный класс)

21 Март 2010 Vitaliy Juravskiy 81 View Comments

Шаблон делает клиентские классы независимыми от тех классов, которые реализуют поведение (сервис) и при этом позволяет обеспечить согласованное поведение между ними. Мы используем преимущества шаблонов “Interface” и “Abstract superclass” которые включены в рассматриваемый шаблон проектирования. Можно сделать классы которые реализуют некоторый интерфейс, и при этом наследующиеся от абстрактного класса.

interface-and-abstract-class-design-pattern

При использовании данного шаблона проектирования, обычно интерфейс является открытым, а абстрактный класс закрытым, и включает в себя общие части реализации классов реализации ConcreteClass1, ConcreteClass2 и т.д.

Abstract supersclass (Абстрактный суперкласс)

14 Март 2010 Vitaliy Juravskiy 26 View Comments

Обеспечивает согласованное поведение концептуально связанных классов, через общий абстрактный суперкласс.

Класс реализующий данный шаблон проектирования является абстрактным суперклассом, в котором инкапсулирована общая логика связанных классов. Связанные классы расширяют абстрактный класс по средством наследования. Методы с общей логикой и одинаковыми сигнатурами для всех связанных классов, помещаются в суперкласс, Методы с одинаковой сигнатурой, но зависящей от конкретной реализации подкласса, выносятся как абстрактные методы в суперкласс.

abstract supperclass uml diagramm.jpg

Данный шаблон проектирования уменьшает количество кода в подклассах, но при этом вносит зависимости между суперклассом и подклассами, при этом вносимые изменения в суперкласс могут внести нежелательные последствия в отдельных подклассах.

Gateway (Шлюз)

7 Март 2010 Vitaliy Juravskiy 45 View Comments

Данный шаблон проектирования инкапсулирует в себе бизнес логику доступа к внешней системе, это может быть ресурс, база данных или API сложной библиотеки.

gateway design pattern

Доступ к ресурсу или API происходит через данный шаблон, т.е. он является оберткой, через которую происходит взаимодействие.  С данным шаблоном  проще совершать переходы, например от одной версии ресурса к другой, или с одной реализации API  к другой. Все изменения будут производиться в Шлюзе, и переход затронет малое изменение кода приложения.

Interface (Интерфейс)

28 Февраль 2010 Vitaliy Juravskiy 57 View Comments

Классы предоставляют данные и сервисы клиентским классам, и чтобы клиентские классы не зависели от конкретных реализаций, необходимо заменять их другим классом, который бы минимально влиял на клиентский класс – т.е. клиентские классы получают доступ к данным и сервисам через некоторый интерфейс.

interface design pattern uml

Реализация шаблона в Java не сложная создаем интерфейс для предоставления сервиса, описываем его методы, создаем клиентские классы, которые будут использовать предоставляемый сервис, а также создаем реализацию сервиса, или другими словами реализацию интерфейса.