Что подразумевается под «реализовать метод обертки»? - PullRequest
9 голосов
/ 15 ноября 2009

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

static void sortCoordsByZ(double[][] coords) {
    //implement the wrapper method for the recursive sort method. all work is done the recursive sort method
}

static void recursiveSort(double[][] coords, int lo, int hi) {
    //recursive sort method
}

Ответы [ 6 ]

12 голосов
/ 15 ноября 2009

Оберточным методом является адаптер или фасад ; он предоставляет альтернативный интерфейс для существующего метода.

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

8 голосов
/ 15 ноября 2009

Вы действуете как метод обертки, задавая свой вопрос о назначении в переполнении стека!

Метод-обертка отвечает на вопрос, запрашивая «экспертный» метод ответа. Как правило, он делает три вещи:

  1. Он формулирует вопрос таким образом, чтобы «экспертный» метод мог его понять.
  2. задает «экспертному» методу вопрос
  3. Он дает что-то простое для ответа, чтобы поместить его в правильный формат для вызывающего абонента.

В вашем случае «экспертный» метод - recursiveSort(), и ваш sortCoordsByZ() метод должен будет вызвать recursiveSort() с правильными параметрами, а затем, возможно, сделать что-то с ответом, прежде чем его вернуть.

8 голосов
/ 15 ноября 2009

Когда вы реализуете метод-оболочку, вы фактически кодируете вариант существующего метода, обычно потому, что существующий метод не удовлетворяет вашим текущим требованиям. Исходный метод может быть слишком сложным (слишком много параметров), или он может не совсем выполнять требуемую вещь, что означает, что вы должны написать оболочку (или перегрузку), которая выполняет дополнительную работу, которую не делает оригинальный метод. Обычно при написании обертки вы все равно будете использовать исходную функцию для того, что она делает, и заполняете пробелы оберткой.

3 голосов
/ 15 ноября 2009

В таком случае, разве это не все, что мне нужно поместить в метод "sort by z", если он проходит через массив с именем координаты, у которого заполнены все слоты?

recursiveSort(coords, 0, coords.length-1);
3 голосов
/ 15 ноября 2009

Оборачивает другой метод :) Возможно, он добавляет некоторые дополнительные аргументы, такие как начальные значения lo и hi в вашем случае, и действует как точка входа в вашу сортировку.

1 голос
/ 22 декабря 2013

Методы обертки могут использоваться для абстракции, стандартизации и рефакторинга

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

Чтобы решить эту проблему, вы можете обернуть все методы Helper в свои собственные методы. Эти методы просто состоят из одной строки, которая вызывает методы вашей импортированной библиотеки. Вы должны вызывать все методы-оболочки через ваше приложение, а не напрямую вызывать импортированную библиотеку.

Теперь вы получаете выгоду от всей абстракции, когда вы хотите импортировать новую библиотеку. Вместо того, чтобы переписывать каждый вызов через приложение, вы можете просто переписать методы-обертки, которые должны быть его собственным классом. Теперь изменение 1 метода в классе оболочки обновляет все приложение, где этот метод используется. (См., Например, методы MVC4 .NET HTML Helper)

По вопросу стандартизации обертки могут использоваться для установки значений по умолчанию для многих вещей, которые устанавливаются вручную при создании объекта. Но теперь, если они установлены в оболочке, их больше не нужно устанавливать каждый раз, когда вызывается оригинальный метод. Например, вы можете установить размеры Grid View в оболочке Gridview, и теперь, когда вы вызываете метод оболочки в вашем приложении, все виды сетки имеют одинаковые размеры, и во всем приложении необходимо поддерживать меньше строк кода; также выполняет рефакторинг.

...