Скажем, у меня есть следующий сценарий:же реализация в различных подклассов
abstract class A {
abstract method1();
abstract method2();
}
class B extends A {
method1() {
// implementation 1
}
method2() {
// implementation 3
}
}
class C extends A {
method1() {
// implementation 1
}
method2() {
// implementation 4
}
}
class D extends A {
method1() {
// implementation 2
}
method2() {
// implementation 4
}
}
Итог: несколько подклассов одного и того же класса, с использованием различных реализаций метода для различных методов.
Проблема в том, что у меня такая же реализация в разных подклассах. Мой вопрос в том, что делать с этими общими реализациями?
Логичным способом сделать это было бы создание другого уровня абстракции, но это работает только в том случае, если у меня есть один метод с общими реализациями (поскольку Java не имеет множественного наследования). Я мог бы также применить реализацию, наиболее часто используемую в суперклассе, и реализовать ее по-другому в других классах. Тем не менее, я бы этого не сделал, потому что со временем наиболее распространенная реализация может измениться с добавлением других классов, и, кроме того, я хотел бы сохранить методы абстрактными в суперклассе.
Есть ли какой-нибудь шаблон, который бы разрешил мою проблему в «элегантной манере»?
Существует нет шаблона для объединения пучка несвязанного метода. Шаблон будет зависеть от того, как эти методы связаны друг с другом (контекстная часть шаблона). –
Если методы не связаны друг с другом, но вы все равно хотите ссылаться на них из одного класса, используйте: 'single class, no inheritance and (один командный объект для каждого метода) ', вы можете вводить объекты команды через конструктор –
Хорошо, что они не связаны друг с другом. Они предоставляют некоторые необходимые функции для Клиента, но делают это по-другому. – Deelazee