Mam 2 klasy w różnych namespace o takich samych nazwach i metodach, ale są to wtyczki z zewnętrznych bibliotek i nie mogę dodać wspólnej klasy/interfejsu
A/MyClass z metodą print() //Zwraca "Hello"
B/MyClass z metodą print() //Zwraca "World"
W moim programie chcę dodać wykonanie tych metod, ale muszę dodać na końcu wykonanie metody endText(), która dla pierwszej klasy zwróci "!", dla drugiej "...".
interface Ending {
endText()
}
class MyAClass extends A/MyClass implements Ending {
endText() { log('!') }
}
class MyBClass extends B/MyClass implements Ending {
endText() { log('...') }
}
main() {
objects = [ new MyAClass, new MyBClass ]
foreach(obj in objects) {
obj->print()
obj->endText()
}
//Hello!
//World...
}
W jaki sposób mogę teraz dodać wspólną metodę dla tych dwóch klas? Myślałem o abstrakcji zamiast interface (template method), ale wtedy dziedziczenie po klasie odejdzie i trzeba będzie implementować wywołanie print przez klasę która obecnie jest rodzicem... Dodać nową klasę jako pole w stylu strategy pattern i wywołanie w kodzie aplikacji?
P.S. Na początku pytanie było trochę inne, bo się zagapilem upraszczając problem do tego przykładu.