LINUX.ORG.RU

[java]декораторы вызова метода


0

1

Есть некий класс (А), который агрегирует в себе объекты другого класса (В). Надо к каждому вызову определенного метода (М) класса В добавить свои обработчики «до» и «после» вызова М. Более конкретный пример:

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

Гугл подсказывает, что мне нужно контрактное программирование. Но, насколько я понял, мне-то надо добавлять декораторы в рантайме..

Подскажите, как лучше сделать задуманное?

★★

java.lang.reflect.Proxy, только там надо будет выделить проксируемые методы в отдельный интерфейс.

Absurd ★★★ ()

кроме аспектов, есть еще так называемые костыли ;)

1) написать кодогенератор для декораторов
2) отказаться от «методов» и использовать везде паттерн «команда». В конструкторе каждой команды навешивать before и after.

stevejobs ★★★★☆ ()
Ответ на: комментарий от Absurd

нет, конечно =) я предпочитаю легковесные решения. Вроде gfv3 + pgsql 9

JFreeM ★★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.