Wszyscy wiedzą jak działają decoratory - dodają logikę w runtime'ie.
Moje pytanie brzmi - czy kawałek kodu który wymaga żeby element który dostaje był nieudekorowany to antywzorzec?
Przykład:
interface Base {
int realMethod();
Base undecorate();
}
class BaseImpl implements Base {
public int realMethod() {
return 2;
}
public Base undecorate() {
return this;
}
}
class BaseDecorator implements Base {
private final Base base;
public BaseDecorator(Base base) {
this.base = base;
}
public int realMethod() {
return super.realMethod() + 14;
}
Base undecorate() {
return base.undecorate();
}
}
Teraz gdy ktoś ma Base
to to może być albo udekorowane, albo nie. Jednak gdy wywoła Base.undecorate()
wtedy na pewno dostanie implementację BaseImpl
. Można by nawet jeszcze bardziej przywiązać tą implementację projektując sygnaturę o tak: BaseImpl undecorate();
.
Pytanie jednak, czy jeśli moja architektura wymaga jednego miejsca w kodzie gdzie muszę mieć nieudekorowaną instację - to czy to znaczy że zwaliłem?