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?