Kto powinien tworzyć instancję A? Mogą pomóc zasady GRASP, a konkretnie wzorzec Creator. Zgodnie z nim, kandydatem, który będzie miał odpowiedzialność tworzenia instancji klasy może być:
- ten kto mocno (kompozycja) lub słabo (agregacja) przechowuje obiekty klasy A
- ten kto wie jak utworzyć obiekt (ma niezbędne informacje, np. kolor guzika, wiek etc.)
- ten kto często używa takich obiektów
- coś czego nie do końca rozumiem w GRASP (w oryginale chodzi o to, że B jest kandydatem do tworzenia instancji A, jeśli "B records A"), ale tłumaczę sobie, że chodzi o odkładanie historii/emitowanie zdarzeń, ale nie mam pewności czy taki w oryginale był zamysł...
Jeśli jest więcej niż jeden kandydat, to preferowany jest ten z 1).
Twój przykład jest bardzo prosty i każdą z wersji można obronić. W B3, biznesowo może być uzasadnione użycie nowej instancji obiektu, np. prezerwatywy, strzykawki, nowego pliku tymczasowego. Niektórzy mogą upierać się na re-użycie i mieć jakieś ważne powody, ale to już kwestia kontekstu.