Затримка / затримка? Я подзвоню БС з цього приводу. З цієї практики має бути рівно нульові накладні витрати. ( Редагувати: У коментарях було зазначено, що це може насправді гальмувати оптимізацію, яку виконує HotSpot VM. Я не знаю достатньо про реалізацію VM, щоб підтвердити або спростувати це. Я базував свій коментар на C ++ реалізація віртуальних функцій.)
Є якийсь код накладних витрат. Ви повинні створити всі конструктори з базового класу, який потрібно, пересилаючи їх параметри.
Я також не розглядаю це як анти-візерунок. Однак я вважаю це пропущеною можливістю. Замість того, щоб створити клас, який отримує базовий клас просто заради перейменування, як ви замість цього створити клас, який містить колекцію та пропонує покращений інтерфейс, що стосується конкретного випадку? Чи повинен ваш кеш-віджет дійсно пропонувати повний інтерфейс карти? Або він повинен запропонувати спеціалізований інтерфейс?
Крім того, у випадку з колекціями шаблон просто не працює разом із загальним правилом використання інтерфейсів, а не реалізацій - тобто в простому коді колекції ви створили б HashMap<String, Widget>
і потім призначили його змінній типу Map<String, Widget>
. Ваш WidgetCache
не може поширюватися Map<String, Widget>
, тому що це інтерфейс. Це не може бути інтерфейс, що розширює базовий інтерфейс, тому HashMap<String, Widget>
що не реалізує цей інтерфейс, а також жодна інша стандартна колекція. І хоча ви можете зробити його класом, який розширюється HashMap<String, Widget>
, тоді вам доведеться оголосити змінні як WidgetCache
або Map<String, Widget>
, і перший втрачає вам гнучкість замінити іншу колекцію (можливо, якась лінива колекція завантаження ORM), а другий тип перемагає крапку мати клас.
Деякі з цих контрапунктів стосуються і мого запропонованого спеціалізованого класу.
Це все, що слід врахувати. Це може бути, а може і не бути правильним вибором. В будь-якому випадку запропоновані вашими колегами аргументи не вірні. Якщо він вважає, що це анти-модель, він повинен її назвати.