Java наследование и шаблоны проектирования консультирует - PullRequest
3 голосов
/ 23 сентября 2019

Я делаю приложение для Android, которое может запускать разные модели ML, и я хочу создать несколько классов для представления данных результатов, каждая модель ML имеет свои переменные / результат, например, проблема классификации имеет метки между темдругие не имеют их.

Я хочу использовать наследование в Java и делать что-то вроде Результат в качестве интерфейса и отца ClassificationResult и RegresionResult так что я мог бы сделать:

Arraylist<Result> resultList;
ClassificationResult cr = new ClassificationResult...
RegresionResult rr = new RegresionResult...
resultList.add(cr)
resultList.add(rr)  

Но я сталкиваюсь с проблемой, что я не могу вызывать методы от детей, таких как ClassificationResult.getLabels () (я мог бы иметь все методы всех детей в интерфейсе, но это кажетсястранно для меня)

Я видел некоторые шаблоны, Factory и Builder, но я столкнулся с ранее описанной проблемой с шаблоном Factory, и с Builder (имеющим все переменные в одном классе) большинство из них не будут инициализированы.

Буду признателен за некоторые идеи о том, как я должен разработать это

1 Ответ

4 голосов
/ 23 сентября 2019

Если это похоже на утку и крякает как утка, но требует батарей, возможно, у вас неправильная абстракция.

(Поищите в интернете эту фразу и прочитайте статьи, которые выfind.)

Другими словами, если вы не знаете, как различать объекты, не рассматривайте их как различные спецификации одного интерфейса.

Если вы не реализуете низкоуровневую инфраструктуруЕсли вы испытываете соблазн использовать instanceof или - лучше сказать - если использование instanceof - единственный способ отличить ваши объекты, скорее всего, ваш дизайн неправильный с самого начала.

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

Если вы зоолог, вы можете рассмотреть собак и кошек как просто подтипы одного интерфейса.Если вы слепы и вам нужна собака-поводырь , тогда эти два совершенно разных класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...