Выкройка адаптера или композиция?

Я хочу использовать внешнюю библиотеку из gitHub более чистым способом

public class Sgtin { full of fields and methods including encode and decode }

в моем классе Decoder я хотел бы иметь только 2 метода из нескольких, реализованных в объекте

public class Decoder {

private static final Sgtin sgtin = new Sgtin();

public static String encode(String ean, Long serialNumber, int filterValue) {
    return sgtin.encode(ean, serialNumber, filterValue);
}

public static Sgtin decode(String cpe) {
    return sgtin.decode(cpe);
}

}

Я хотел бы скрыть класс Sgtin в mthod decode (в случае, если я внесу в него какие-либо изменения, мне не придется менять исходный класс), поэтому с целью сделать это я создаю другой объект (Decoder) и сопоставляю Sgtin с Это? Как лучше всего это сделать?

Object - действительно плохое название для класса, который вы хотите обернуть.
davidxxx 06.07.2018 11:52

Спасибо, Вы правы - я сменил имя на Сгтин. Как вы думаете, оба метода могут быть статичными?

John 06.07.2018 12:00

Трудно ответить, если мы не знаем, как на самом деле используется sgtin. Вы вызываете статические методы или методы экземпляра этого класса?

davidxxx 06.07.2018 12:02

Что это за библиотека? Мне было бы интересно.

Murat Karagöz 06.07.2018 12:02

Sgtin - это просто общедоступный класс, который я нашел в Интернете и скопировал в свой пакет, где у меня есть класс Decoder, и попытался использовать его более изящно, скрывая «двигатель и беспорядок», включенный в класс sgtin.

John 06.07.2018 12:06

Я использовал это: github.com/impinj/itemsense-hybris-datahub-java/blob/master/‌…

John 06.07.2018 12:11

И совместить с codereview.stackexchange.com/questions/105121/…

John 06.07.2018 12:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
78
1

Ответы 1

Вы можете изменить свой класс Decoder, чтобы реализовать шаблон Singleton. Либо вам здесь не хватает кода, потому что он действительно должен вызывать NPE, поскольку sgtin не инициализирован.

Но ваш подход и так хорош.

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

Murat Karagöz 06.07.2018 12:08

@Anna Как вы сами сказали, вам нужно использовать = new Sgtin().

Murat Karagöz 06.07.2018 12:18

@Anna Да вот так

Murat Karagöz 06.07.2018 12:44

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

Dushmantha 06.07.2018 12:54

Хорошо, могу ли я сказать, что это пример использования адаптера объекта шаблона? В разных источниках я заметил, что подразумеваемые методы недействительны, а класс Sgtin может быть расширен с помощью Decoder.

John 06.07.2018 13:39

Другие вопросы по теме