Я думаю, мне нужен шаблон адаптера здесь, но я, кажется, повторяю детали реализации метода

#java #design-patterns #adapter

#java #шаблоны проектирования #адаптер

Вопрос:

Вы можете видеть ниже, что у меня есть два конкретных класса, которые могут совместно использовать почти все детали реализации, уже предоставленные через абстрактный класс. Каждому из них нужно реализовать только 2-3 метода самостоятельно. Однако ImplOne также реализует из InterfaceTwo, который имеет дополнительные 1-2 метода для реализации. Я не хочу предоставлять точно такие же детали реализации в ImplOne, как я делаю в AbstractImpl, но то, что у меня есть здесь в настоящее время, не кажется правильным. В шаблоне адаптера, судя по примерам, которые я видел, детали реализации, похоже, дублируются для адаптируемых интерфейсов.

        InterfaceOne
         /      
InterfaceTwo  AbstractImpl
               /       
          ImplOne      ImplTwo
  

Комментарии:

1. Где дублирование? Я не понимаю, почему вы должны дублировать реализации.

2. Нет ли чего-то неправильного в расширении абстрактного класса, который реализует InterfaceOne, а затем в реализации InterfaceTwo, который также расширяет InterfaceOne? Я не знаю, но что-то в этом кажется неправильным.

3. В этом нет абсолютно ничего плохого. Это просто информация о типе. Из-за этого методы не нужно внедрять повторно.

Ответ №1:

В этом сценарии проблем нет. ImplOne должен реализовать все методы, объявленные в interfaceOne или interfaceTwo, если они уже не реализованы abstractImpl. implOne также должен реализовать абстрактные методы из abstractImpl. В качестве упражнения я предлагаю создать ImplOne без методов и позволить компилятору сообщить вам, какие методы необходимо реализовать.