У меня есть два класса A и B. Теперь у меня есть отношения B "has a" A
. Итак, самым тривиальным для нас является композиционная картина. Теперь одно из полей B является объектом A. Задача состоит в том, что некоторые из полей A и B являются общими. Таким образом, в этом случае эти поля будут излишними. Я не могу создать абстрактный класс из общих полей и сделать A и B наследовать его, потому что они уже расширяют некоторый абстрактный класс. Какая была бы лучшая практика в этом случае?Устранение избыточности в структуре композиции java
ответ
Если A и B не могут иметь общий базовый класс, вы не можете поместить общие поля в такой класс.
Один из способов избежать избыточности является создание третьего класса C, который содержит общие поля А и В, и пусть А и Б есть член класса C.
Такое повторное факторинга бы имеют смысл только в том случае, если общие поля имеют смысл как отдельный класс (т. е. этот класс будет представлять собой объект или концепцию реальной жизни, а не просто произвольную группу полей). В противном случае я сохраню избыточные поля.
Например, Office
и Person
, вероятно, не имеют общего базового класса (кроме Object
), но предположим, что оба из них имеют такие свойства, как название улицы, город, почтовый индекс, и т.д ... Вы можете легко увидеть, что эти поля должны быть извлечены до класса Address
.
Как вы сказали, что ваша А и Б класс уже переоформила с абстрактным классом, Вы можете попробовать делегировать общие поля с не общей функцией, чтобы дифференцировать его
Например
class B extends AbstractB {
private String myField;
public String getMyField(){
return myField;
}
}
class A extends AbstractA {
private String myField;
private B b;
public A(B b){
this.b = b;
}
public String getMyField(){
return myField;
}
public String getMyBField(){
return b.myField;
}
}
- 1. Устранение избыточности в Java Constructor
- 2. Устранение избыточности уровня TCP
- 3. Устранение избыточности в нескольких конструкторах
- 4. Состав композиции с использованием @With аннотации в структуре воспроизведения (Java)
- 5. конденсаторные MySQL Query By Устранение избыточности
- 6. Код Java для композиции
- 7. Java: bidiretional пример композиции
- 8. Устранение контекста объекта в структуре сущности 4
- 9. Устранение избыточности с использованием CRTP и множественного наследования
- 10. Как избежать избыточности кода конструктора в Java?
- 11. Устранение неполадок в java
- 12. Практическое использование композиции и интерфейса в Java?
- 13. Преимущества композиции над наследованием в Java
- 14. Дизайн для сокращения избыточности кода - Java/WebServices
- 15. Избегайте избыточности в Python
- 16. Поиск избыточности в таблице
- 17. Устранение неполадок, синхронизированных в java
- 18. Устранение неполадок toString() в Java
- 19. Устранение зависимостей в java-пакетах
- 20. Устранение SQL-инъекции в java
- 21. Устранение непроверенного предупреждения в Java
- 22. Java - вызов this.функции() из объекта композиции
- 23. Отношение композиции с использованием абстрактных классов-Java
- 24. Какие возможности автоматического преодоления избыточности обеспечивают Android?
- 25. Прерывание композиции композиции/очистки кликов Windows IME
- 26. Устранение объекта Java
- 27. Устранение неполадок java app
- 28. Java: Устранение утечки памяти
- 29. Java: устранение Мертвого кода
- 30. java устранение вывоза мусора
Вы говорите, что B может иметь или не иметь A. И поля являются избыточными только тогда, когда B имеет действительный A? – KDM
B почти всегда имеет соответствующий A. Оба имеют общее поле, которое фактически является местоположением файла, значение которого всегда одинаково для обоих. –
Извините за педантичность. Это почти всегда или всегда? – KDM