Ответы:
В общем случае класс-оболочка - это любой класс, который «оборачивает» или «инкапсулирует» функциональность другого класса или компонента. Они полезны, обеспечивая уровень абстракции от реализации базового класса или компонента; например, классы-обертки, которые обертывают компоненты COM, могут управлять процессом вызова компонента COM, не беспокоясь о вызывающем коде. Они также могут упростить использование базового объекта за счет уменьшения количества задействованных точек интерфейса; часто это обеспечивает более безопасное использование базовых компонентов.
Как это звучит: класс, который «оборачивает» функциональность другого класса или API в более простой или просто другой API.
Классы Wrapper предоставляют способ использовать примитивные типы в качестве объектов. Для каждого примитива у нас есть класс-обертка, такой как,
int Integer
byte Byte
Integer и Byte - это классы-обёртки примитивов int и byte. Существуют времена / ограничения, когда вам нужно использовать примитивы в качестве объектов, поэтому классы-оболочки предоставляют механизм, называемый боксом / распаковкой.
Понятие может быть хорошо понято следующим примером как
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
таким образом, мы можем использовать тип класса-оболочки для преобразования в другие примитивные типы. Этот тип преобразования используется, когда вам нужно преобразовать примитивный тип в объект и использовать их для получения других примитивов. Хотя для этого подхода вам нужно написать большой код. Тем не менее, то же самое может быть достигнуто с простой техникой приведения, поскольку фрагмент кода может быть достигнут, как показано ниже
double d = 135.0;
int integerValue = (int) d ;
Хотя двойное значение явно преобразуется в целочисленное значение, также называемое понижением.
Класс-обертка не обязательно должен оборачивать другой класс. Это может быть функциональность обёртывания класса API, например, в файле dll.
Например, может быть очень полезно создать класс-оболочку dll, который позаботится обо всей инициализации и очистке dll, а также создать методы класса, которые переносят указатели на функции, созданные, например, из GetProcAddress()
.
Ура!
Класс-обертка - это класс, который «оборачивает» что-то еще, как и его имя.
Более формальным определением этого класса будет класс, реализующий шаблон адаптера . Это позволяет вам модифицировать один набор API в более удобную для чтения форму. Например, в C #, если вы хотите использовать собственный API-интерфейс Windows, он помогает обернуть его в класс, соответствующий рекомендациям по разработке .NET.
Существует несколько шаблонов проектирования, которые можно назвать классами-обертками.
См. Мой ответ на вопрос « Чем отличаются шаблоны прокси, декоратора, адаптера и моста? »
Также может быть полезно отметить, что в некоторых средах большая часть того, что могут делать классы-оболочки, заменяется аспектами.
РЕДАКТИРОВАТЬ:
В общем случае обертка будет расширять то, что делает wrappee, не заботясь о реализации wrappee, в противном случае нет смысла оборачивать объект по сравнению с расширением обернутого класса. Типичным примером является добавление информации о синхронизации или функциональности регистрации вокруг какого-либо другого сервисного интерфейса, в отличие от добавления его в каждую реализацию этого интерфейса.
Затем это становится типичным примером для программирования аспектов. Вместо того, чтобы проходить через интерфейсную функцию по функции и добавлять шаблонную регистрацию, в аспектном программировании вы определяете pointcut, являющийся своего рода регулярным выражением для методов, а затем объявляете методы, которые вы хотите выполнить до, после или вокруг всех методов, соответствующих Точка. Вероятно, будет справедливым сказать, что аспектное программирование является своего рода использованием шаблона Decorator, для которого также могут использоваться классы-обертки, но обе технологии имеют другое применение.
Класс Wrapper - это класс, который оборачивает другой класс и обеспечивает абстракцию между клиентом и исходным классом, который оборачивается.
класс-обертка обычно является классом, который имеет объект как частное свойство. Оболочка реализует API этого закрытого объекта, и поэтому его можно передать в качестве аргумента, где этот закрытый объект будет.
скажем, у вас есть коллекция, и вы хотите использовать какой-то перевод, когда к ней добавляются объекты - вы пишете класс-обертку, который имеет все методы коллекции. когда вызывается add (), оболочка переводит аргументы, а не просто передает их в частную коллекцию.
Обертка может использоваться везде, где может использоваться коллекция, а закрытый объект может иметь другие объекты, ссылающиеся на него и читающие его.
Класс-обертка - это класс, который используется для обертывания другого класса, чтобы добавить слой косвенности и абстракции между клиентом и исходным классом, который обернут.
Класс Wrapper - это оболочка вокруг примитивного типа данных. Он представляет примитивные типы данных в соответствующих им экземплярах классов, например, булев тип данных может быть представлен как экземпляр булева класса. Все примитивные классы-обертки в Java являются неизменяемыми, т. Е. После присвоения значения экземпляру класса-обертки дальнейшее изменение невозможно.
Классы Wrapper появились для удовлетворения основных потребностей программистов - то есть для использования примитивных значений везде, где разрешены только объекты. Как следует из их названия, классы-обертки оборачиваются вокруг примитивного значения и содержат значение в объекте. Таким образом, все те места, где примитивы были запрещены - такие как обобщенные элементы, ключи хеш-карты, массивы и т. Д. - программисты теперь имеют возможность предоставлять эти примитивные значения в качестве соответствующих им типов оболочки.
Кроме того, эти типы оболочек имеют ряд служебных методов для преобразования из примитивного типа в соответствующие типы оболочек и обратно, а также из строк в типы оболочек и обратно.
Я написал подробную статью о классах-оболочках в своем блоге, в которой подробно объясняется концепция типов оболочек - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Раскрытие - Этот блог принадлежит мне)
В настоящее время я использовал класс-оболочку для своего проекта и основные преимущества, которые я получаю (только одно преимущество, чтобы расширить описание темы):
Обработка исключений: у моего основного класса, который оборачивает другой класс, есть методы, которые выдают исключения, если таковые возникают, поэтому я создал класс-оболочку, который обрабатывает исключения и немедленно регистрирует их. Итак, в моей основной области нет обработки исключений. Я просто вызываю метод и что-то делаю.
Простое использование: я могу легко инициировать объект. Обычно начальная фаза состоит из множества шагов.
Читаемость кода: когда другой программист откроет мой код, код будет казаться очень понятным и простым в управлении.
Скрытие деталей: если вы генерируете класс, который собирается использовать другой программист, вы можете обернуть детали, такие как «обработка ошибок, обработка исключений, регистрация сообщений и т. Д.», Чтобы программисту не пришлось обрабатывать хаос, просто использует методы.
Класс-обертка - это класс, который служит единственной цели - удерживать что-то и добавлять к нему некоторую функциональность. В Java, поскольку примитивы (например, int, float, chars ...) не являются объектами, поэтому, если вы хотите обращаться с ними как с одним, тогда вы должны использовать класс-оболочку. Предположим, вы хотите создать вектор целых, проблема в том, что вектор содержит только объекты, а не примитивы. Итак, что вы будете делать, это поместить все целые числа в упаковщик Integer и использовать его. Пример:
int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
Оболочка - это класс, который используется для связи между двумя разными приложениями между разными платформами.