Как я понимаю вопрос, он спрашивает, что лучше
Bar bar = foo.getBar();
bar.donkey();
...
bar.kong();
или
foo.getBar().donkey();
...
foo.getBar().kong();
Если getBar
не дорого, вряд ли будут существенные различия в производительности. Кроме того, память вряд ли будет проблемой. Сконцентрируйтесь на понятности.
Есть разные мнения.
Я полагаю, что Мартин Фаулер предпочитает последнее. Код является независимым, и, вероятно, его легче реорганизовать.
Я считаю, что рефакторинг служит цели понятности. Первый говорит мне, что объект, используемый в обоих вызовах, действительно имеет общий источник, и в качестве бонуса, что это [тип]. Как правило, это более явно и, хотя более многословно, меньше происходит.
С другой стороны, вы можете захотеть включить что-то вроде:
foo.donkey();
...
foo.kong();