私は実際に Visitor パターンを提案します。
クラス A には、次のように明確に定義された public メソッドを持つビジターを受け入れるメソッドがあります。
まず、訪問されたクラスは、明確に定義されたインターフェースを持ついくつかのクラスを許可し、それ自身のデータを外部に渡しません。
public class A {
int data;
public void getFormattedBy(Formatter f) {
f.format(data);
}
}
複数のフォーマッタを使用できるビジターのインターフェース
public interface Formatter {
void format (int data);
}
訪問したクラスに許可されるフォーマッタ。
public class B implements Formatter {
public void format(int data) {
// do the formatting and printing
}
}
この方法では、単に呼び出します
A a = new A();
B b = new B(); // the formatter
a.getFormattedBy(b);
最終的に、ビジター (フォーマッター) は、ビジターを許可する多くのクラスにアクセスでき (おそらく独自のインターフェースを実装することによって)、訪問したクラスには多くのビジターがアクセスできます。