Skip to main content

Adapter / decorator / proxy / wrapper

Очень похожи. Все создают "промежуточный" объект, который "более удобен" для клиента. Но еще интереснее то, что банда четырех и про Adapter и про Decorator говорит: "известен также под именем Wrapper". Так в чем же разница?

1. Adapter (Адаптер).
Нужно использовать компоненты, интерфейс которых не совпадает с "нашими" интерфейсами. Нужен "переходник", который интерфейс компонента приведет к тому виду, с которым нам удобно работать. Например, есть сторонняя библиотека и есть наша система, работающая с иными интерфейсами. Изменить библиотеку мы не можем, менять свою реализацию не хотим (а вдруг потом будет другая библиотека, что тогда?).

2. Wrapper (Обёртка).
Есть функциональность, которая не является объектом, например, библиотека. Хотим сделать из нее что-то объектное.

3. Decorator (Декоратор).
Хотим добавить функциональность к объекту, но не наследовать. Похоже на servlet filter.
Цель: добавить в класс новое поведение.

4. Proxy (Заместитель).
Упаковывает объект для управления доступом к нему. Для этого бывают разные причины:
- удаленный заместитель управляет доступом к удаленному объекту (например, stub объект в rmi);
- виртуальный заместитель управляет доступом к ресурсу, создание которого требует больших затрат;
- защитный заместитель контролирует доступ к ресурсу в соответствии с системой привилегий.

Итак:
Adapter :    меняет интерфейс, не меняет поведение
Wrapper :   предоставляет интерфейс
Decorator : меняет поведение; изменение интерфейса как побочный продукт.
Proxy :        управляет доступом к объекту

Comments

Popular posts from this blog

Блочный, строчный, ...

Сборник советов: 1. Прижать элемент к нижнему краю контейнера: 2 . Две колонки: 3 . Что означает символ ">" в селекторе? Означает, что будут выбраны только прямые потомки. По-умному, direct descendant combinator. Иными словами, если есть: То "div a {color: blue;}" изменит цвет всех ссылок, а "div > a {color: blue;}" - только первой и третьей. 4 . TODO

Hibernate

1. Hibernate Session . Javadoc называет её главным интерфейсом между java-приложением и Hibernate. Иногда её называют единицей работы или логической транзакцией. Основная функция сессии - обеспечить операции создания, чтения, удаления объектов. Объекты могут находиться в одном из 3 состояний (см. 2) Сессия создается с помощью SessionFactory. SessionFactory знает конфигурацию ORM, её внутреннее состояния immutable. При вызове Configuration().configure() загружается файл hibernate.cfg.xml. После того, как конфигурация загружена, можно изменить настройки программно. Данные корректировки возможны только до создания экземпляра фабрики сессий. // Initialize the Hibernate environment Configuration cfg = new Configuration().configure(); // Create the session factory ServiceRegistryBuilder srb = new ServiceRegistryBuilder(); ServiceRegistry sr = srb.applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory factory = cfg.buildSessionFactory(sr); // Obtain the new session obj...

Первые шаги в Selenium

Цель расплывчата: понять и сделать хоть что-нибудь =) Selenium Selenium - группа продуктов. Отличное описание в статье Что такое Selenium? Selenium IDE - плагин для Firefox, позволяет записать тест, выполняя действия в браузере. Казалось бы, Selenium WebDriver должен дать больше возможностей: всё таки не из графического интерфейса тесты пишем, а с помощью языка программирования, но интересная мысль в другой статье того же автора  Что такое Selenium WebDriver? : "... WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, .."  Локаторы Выбрать элемент на странице можно используя локаторы. Локаторы (в Selenium IDE в поле target) используют DOM, XPath или CSS (или просто ищут по id/name). Полезное: XPath: XML Path La...