Есть некий класс (А), который агрегирует в себе объекты другого класса (В). Надо к каждому вызову определенного метода (М) класса В добавить свои обработчики «до» и «после» вызова М. Более конкретный пример:
class A {
private B obj;
public void setObj(B b) {
this.obj = b { // условный код. добавить обработчики к методу f
int f.before(int x) { print(1); } // вызывается до вызова метода f
int f.after(int result) { print(10); } // вызывается после вызова метода f
}
}
public B getObj() {
return this.obj;
}
}
class B {
int f(int x) {
print(42);
}
}
...
A a = new A();
a.setObj(new B());
a.getObj().f(0);
// на экране 1 42 10
Гугл подсказывает, что мне нужно контрактное программирование. Но, насколько я понял, мне-то надо добавлять декораторы в рантайме..
Подскажите, как лучше сделать задуманное?