Что такое класс-оболочка?

Что такое класс обертки?
Чем полезны такие занятия?

17 ответов


В общем случае класс-оболочка-это любой класс, который" обертывает "или" инкапсулирует " функциональность другого класса или компонента. Они полезны, предоставляя уровень абстракции от реализации базового класса или компонента; например, классы-оболочки, которые обертывают com-компоненты, могут управлять процессом вызова com-компонента, не беспокоя вызывающий код с ним. Они также могут упростить использование базового объекта путем уменьшения количества точек интерфейс часто это делает более безопасным использование базовых компонентов.


только то, что это звучит: класс, который "обертывает" функциональность другого класса или API в более простой или просто другой API.

посмотреть: шаблон адаптер, фасад шаблон


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

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 ;

хотя двойное значение явно преобразуется в целочисленное значение, также называемое downcasting.


класс-оболочка не обязательно должен обернуть другой класс. Это может быть функциональность обертывания класса API, например, в dll-файле.

например, может быть очень полезно создать класс-оболочку dll, который заботится обо всех инициализации и очистке dll и создает методы класса, которые переносят указатели функций, созданные, например, из GetProcAddress().

Ура !


класс-оболочка-это класс, который" обертывается " вокруг чего-то другого, как и его имя.

более формальным определением этого будет класс, который реализует Шаблон Адаптер. Это позволяет изменить один набор API в более удобную для чтения форму. Например, в C#, если вы хотите использовать собственный API Windows, это помогает обернуть его в класс, который соответствует рекомендациям по дизайну .NET.


существует несколько шаблонов проектирования, которые можно назвать классами оболочки.

см. мой ответ на "чем отличаются Шаблоны Прокси, декоратора, адаптера и моста?"


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

EDIT:

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

Это в конечном итоге является типичным примером для Аспектного программирования. Вместо того, чтобы проходить функцию интерфейса по функциям и добавлять ведение журнала шаблонов, в аспектном программировании вы определяете pointcut, который является своего рода регулярным выражением для методов, а затем объявляете методы, которые вы хотите выполнить до, после или вокруг всех методов, соответствующих pointcut. Его, вероятно, справедливо сказать, что аспект программирование-это своего рода Использование шаблона декоратора, для которого также могут использоваться классы обертки, но обе технологии имеют другие применения.


класс-оболочка-это класс, который обертывает другой класс и обеспечивает абстракцию между клиентом и исходным классом.


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

скажем, у вас есть коллекция, и вы хотите использовать какой - то перевод при добавлении в нее объектов-вы пишете класс-оболочку, который имеет все методы коллекции. когда add () вызывается, оболочка переводит аргументы вместо того, чтобы просто передавать их в private коллекция.

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


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


класс-оболочка-это оболочка вокруг примитивного типа данных. Он представляет примитивные типы данных в соответствующих экземплярах класса, например, тип данных boolean может быть представлен как экземпляр класса Boolean. Все примитивные классы-оболочки в Java неизменяемы, т. е. один раз присвоенное значение экземпляру класса-оболочки не может быть изменено далее.


Java programming предоставляет класс-оболочку для каждого примитивного типа данных, чтобы преобразовать примитивные типы данных в соответствующий объект класса-оболочки.


сделать благополучие класса обертки - непростая задача. Понять класс обертки, как он разработан некоторыми другими, также непростая задача. Потому что это идея, а не код. Только когда вы понимаете идею, вы можете понять обертку.


классы-оболочки появились, чтобы удовлетворить основную потребность программистов-т. е. использовать примитивные значения там, где разрешены только объекты. Поскольку их имя предполагает, что классы-оболочки обертывают примитивное значение и удерживают значение в объекте. Таким образом, все те места, где примитивы не были разрешены - такие как дженерики, хэшмап-ключи, Arraylists и т. д. - программисты теперь имеют возможность предоставлять эти примитивные значения в качестве соответствующих типов обертки.

В дополнение эти типы оболочек имеют ряд полезных методов преобразования из примитивного типа в соответствующие типы оболочек и обратно, а также из строк в типы оболочек и обратно.

Я написал подробную статью о классах обертки в моем блоге, который объясняет концепцию типов обертки в глубине -http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Раскрытие информации-этот блог принадлежит мне)


в настоящее время я использовал класс-оболочку для своего проекта и основные преимущества, которые я получаю (только одно преимущество, чтобы расширить объяснение темы):

обработка исключений: мой основной класс, который обертывает другой класс, имеет методы, которые бросают исключения, если они возникают, поэтому я создал класс-оболочку, который обрабатывает исключения и регистрирует их немедленно. Таким образом, в моей основной области нет обработки исключений. Я просто вызываю метод и что-то делаю.

легкое использование: я могу легко инициировать объект. Обычно начальная фаза состоит из множества этапов.

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

скрытие деталей: Если вы создаете класс, который будет использовать другой программист, вы можете обернуть детали, такие как "обработка ошибок, обработка исключений, Регистрация сообщений и т. д..."так что программисту не придется справляться с хаосом, просто использует метод.


класс-оболочка-это класс, который служит единственной цели хранения чего-либо и добавления к нему некоторой функциональности. На Java, начиная с примитивов (например, ints, floats, chars...) не являются объектами, поэтому, если вы хотите относиться к ним как к одному, вам нужно использовать класс-оболочку. Предположим, вы хотите создать вектор ints, проблема в том, что вектор содержит только объекты, а не примитивы. Итак, что вы будете делать, это поместить все ints в целочисленную оболочку и использовать ее. Пример:

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();

оболочка-это класс, который используется для связи между двумя различными приложениями между разными платформами