На работе я наткнулся на следующий дизайн в проекте Java:Странный дизайн интерфейса Java
Рассмотрим интерфейсы Foo
, Bar
и Baz
следующим образом:
interface Bar { public int a(); }
interface Baz { public int b(); }
interface Foo extends Bar, Baz { public int c(); }
Нет ж, рассмотрим класс FooImpl
:
public class FooImpl implements Foo {
private Bar bar;
private Baz baz;
public int a() {
return bar.a();
}
public int b() {
return baz.b();
}
public int c() {
return 0;
}
}
Какие случаи использования этого вида иерархии классов? Мне кажется, что это вводит много шаблонов и не добавляет много абстракции, кроме как разбивать то, что может быть большим файлом в более мелкие файлы.
Зависит от конкретной семантики для интерфейсов и авторов тех. В основном Foo основывается на Bar и Baz (код, который работает на баре или базе, также будет работать на Foo). FooImpl реализует один такой Foo. Если этот дизайн имеет смысл, это зависит от фактического использования Bar и Baz и Foo для потребителей этих интерфейсов. – eckes