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


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

17 197

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:

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

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

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

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

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

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

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

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

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

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

классы-оболочки появились, чтобы удовлетворить основную потребность программистов-т. е. использовать примитивные значения везде, где разрешены только объекты. Поскольку их имя предполагает, что классы-оболочки обертывают примитивное значение и удерживают значение в объекте. Таким образом, все те места, где примитивы не были разрешены - такие как generics, HashMap-keys, 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();

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