Шаблон проектирования, который классы Wrapper используют в Java?
Я нашел старый пост, который не проясняет мое понимание шаблонов проектирования, используемых классами Wrapper. Более того, при чтении из Википедии я не получаю никакой четкой информации.
Класс Wrapper действительно использует какой-либо шаблон дизайна или нет?
Если используется шаблон, то из какого шаблона он выходит: Decorator Pattern
Facade Pattern
или Adapter Pattern
?
Ответы
Ответ 1
Если вы ссылаетесь на примитив обтекания
Классы Wrapper предоставляют возможность использовать примитивные типы в качестве объектов
Адаптер шаблон является наиболее точным значением:
Декоратор позволяет добавлять или изменять поведение интерфейса во время выполнения. В качестве альтернативы, адаптер может использоваться, когда оболочка должна учитывать конкретный интерфейс и поддерживать полиморфное поведение, а Facade - когда требуется более простой или простой интерфейс к базовому объекту.
Мы используем возможность класса Wrapper для использования примитива как объекта, что означает добавление поддержки полиморфного поведения
Ответ 2
Все три шаблона проектирования в некотором роде описывают оболочку:
- Декоратор шаблон. Обертывает компонент и потенциально украшает его некоторыми дополнительными характеристиками.
- Адаптер шаблон. Просто оборачивает компонент, чтобы обеспечить подходящий интерфейс для потребителей.
- Фасадный рисунок. Обертывание компонента для облегчения использования сложного внешнего интерфейса.
Ответ 3
Ну, ответы, похоже, указывают на то, что вы можете обернуть объект по многим причинам и, как таковым, по множеству шаблонов. Поэтому я постараюсь дать более общий ответ.
Оболочка - это, по сути, объект, единственной целью которого является предоставление чего-либо без изменения основного объекта (добавление функций, упрощение API, сериализация,... см. Другие ответы), причем эта обертка, как правило, тесно связана с "основным" объектом. За примерами посмотри ответы других.
Другой альтернативой для некоторого использования оболочки является наследование, но не для каждого случая.
Таким образом, оболочка - это просто технический способ сделать что-то. Это не образец сам по себе.
Ответ 4
Они не следуют ни одному из шаблонов дизайна, которые вы упомянули.
Адаптер преобразует интерфейс класса в другой интерфейс. Примитивы не реализуют никаких интерфейсов.
Декоратор добавляет поведение класса, реализующего один интерфейс, оборачивая его в другой, реализующий тот же интерфейс. Примитивы не реализуют никаких интерфейсов.
Цель фасада - замаскировать сложное поведение объекта, который он оборачивает. Нет ничего менее сложного в языке программирования, чем примитив. Подсказка в названии. Во всяком случае, классы-оболочки являются противоположностью этому.
Вдобавок к моему здесь, вот несколько шаблонов дизайна, которые они используют:
Integer
, Long
и Byte
используют пул объектов с весами, чтобы избежать создания ненужных экземпляров.
Boolean
некоторой степени пытается быть мультитоном (в этом конструкторе не рекомендуется), но на практике это не так.
Ответ 5
Классы обертки используют состав. Та же композиция, что и в популярном изречении "Композиция в пользу наследства". Композиция не является образцом дизайна; однако большинство шаблонов проектирования ОО используют композицию как часть своей реализации. Это одна из причин, по которой многие люди пытаются различать разные шаблоны дизайна: общее использование композиции заставляет их всех выглядеть одинаково в определенной степени.
В композиционных отношениях есть две основные части: композитор и композитор. Вы можете думать об этом вообще как о части/целых отношениях. Это может быть один к одному или один ко многим. Обертка - это композитор, то есть целое. Это может обернуть одну или несколько составных частей.
Многие различные шаблоны проектирования используют общие композиционные отношения для разных целей. Многие из этих различных шаблонов все вместе называются "обертками". Книга GoF вызывает как минимум два таких шаблона.
-
ADAPTER Also Known As Wrapper
страница 139 -
DECORATOR Also Known As Wrapper
страница 175
Таким образом, Wrapper - это не единый шаблон проектирования; скорее это категория шаблонов дизайна. Кстати, мы видим ту же динамику с термином Фабрика. Не существует единого шаблона проектирования с именем Factory; скорее это категория шаблонов дизайна.