Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
Скачать 0.73 Mb.
|
4.2. Strategy?Strategy – это поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют. Преимущества: 1. Легкая и быстрая замена алгоритмов; 2. Изолированность кода и данных алгоритмов от остальных классов; 3. Уход от наследования к делегированию; 4. Реализует принцип открытости / закрытости. Недостатки: 1. Раздумывание кода программы за счет дополнительных классов; 2. Клиенту необходимо знать разницу между стратегиями, чтобы выбрать подходящую. 4.3. Factory Method?Factory Method – это порождающий шаблон проектирования, предоставляющий подклассам (дочерним классам) интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, данный шаблон делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не конкретные классы, а манипулировать абстрактными объектами на более высоком уровне. Преимущества: 1. Избавляет класс от привязки к конкретным классам продуктов; 2. Выделяет код производства продуктов в одно место, упрощая поддержку кода; 3. Упрощает добавление новых продуктов в программу; 4. Реализует принцип открытости / закрытости. Недостатки: 1. Может привести к созданию больших параллельных иерархий классов, так как для каждого класса продукта надо создать свой подкласс создателя. 4.4. Singleton?Singleton (Одиночка) - паттерн Singleton гарантирует, что в памяти будет существовать только один экземпляр объекта, который будет предоставлять сервисы. Spring область видимости бина (scope) по умолчанию равна singleton и IoC-контейнер создает ровно один экземпляр объекта на Spring IoC-контейнер. Spring-контейнер будет хранить этот единственный экземпляр в кэше синглтон-бинов, и все последующие запросы и ссылки для этого бина получат кэшированный объект. Рекомендуется использовать область видимости singleton для бинов без состояния. Область видимости бина можно определить как singleton или как prototype (создается новый экземпляр при каждом запросе бина). 5. Для чего существует такое количество ApplicationContext?Очевидно, что для возможности иметь выбор в большом пулле способов конфигурирования Spring. Основные реализации интерфейса ApplicationContext: 1. FileSystemXmlApplicationContext — в конструкторе необходимо указать полный путь к XML-файлу с конфигурацией бинов. Используется для автономных приложений; 2. ClassPathXmlApplicationContext — необходимо поместить XML-файл с конфигурацией бинов в CLASSPATH. Используется для автономных приложений; 3. XmlWebApplicationContext — загружает XML-файл с метаданными бинов в веб-приложении. 4. AnnotationConfigApplicationContext — для обычной Java-конфигурации, в качестве аргумента которому передается класс, либо список классов с аннотацией @Configuration, либо с любой другой аннотацией JSR-330, в том числе и @Component. 5. WebApplicationContext — используется для веб-приложений; 6. Связывание бинов? Как можно связать бины?Связыванием бинов в Spring называется внедрение в бины зависимостей при их инициализации. Это можно делать явно, указывая в конфигурационном xml файле зависимости с помощью тегов , а также в спринге есть механиз автоматического связвания по имени, типу, конструктору. Связывание бинов или внедение зависимостей происходит по следующему алгоритму: 1. Описание бинов. Сделать это можно 3 способами: полностью в .xml файле, в Java коде с использованием аннотаций (@Configuration + методы, помеченные аннотацией @Bean, которые возвращают бины), полностью с помощью аннотаций (@Configuration + @ComponentScan + @Component) 2. Внедрение зависимостей. Может происходить через конструкторы, через сеттеры, через поле над которыми ставиться аннотация @Autowire. Режимы автоматического связывания: 1. ByName (По имени) - используется автоматическое связывание по имени бина. Контейнер Spring ищет в XML файле бин с указанным именем. И если находит бин с таким же именем – производит автоматическое связывание. 2. byType (по типу) - в этом случае контейнер Spring ищет совпадение по типу. В случае, если он находит – происходит автоматическое связывание. Если в XML-файле определены несколько бинов с таким типом, то мы получаем исключение (exception). 3. Constructor (по конструктору) - здесь все происходит так же, как и при использовании режима ‘byType’, с тем отличием, что поиск идет по аргументам конструктора. Если в XML-файле находится несколько таких бинов – мы получаем ошибку (error). 4. autodetect - в этом режиме сначала происходит связывание в режиме ‘constructor’, а затем (если автосвязывание не произошло) в режиме ‘byType’. |