#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 без методов и позволить компилятору сообщить вам, какие методы необходимо реализовать.