Ale teraz chodzi Ci o pierwszy przyklad (dawanie pracownikowi pensji) czy drugi (SumaWazonaPensjiPracownikaIPrzelozonego)?
W pierwszym rozwiazanie nr 2, bo pensja jest przynalezna pracownikowi i jest mu podrzedna.
W drugim przypadku prawdopodobnie rozwiazanie nr 3, chociaz klasa FinanseFirmy jest prawdopodobnie zle zaprojektowana klasa. To znaczy w prawdziwym przypadku taka klasa zawieralaby z 500 metod, z czego polowa nie mialaby ze soba nic wspolnego. Wtedy to rozwiazanie (tworzenie takiej klasy) nie byloby w duchu OOP, bo zawieralaby kilka/wiele odpowiedzialnosci. Chyba, ze bylaby np. implementacja wzorca Fasady.
Rozwiazanie nr 5 z zalozenia odpada. Wzorzec Visitor podany byl jako przyklad sytuacji, kiedy lamanie zasad OOP ma sens. Stosuje sie go w przypadku, gdy model/struktura danych zmienia sie czesciej od operacji na nich wykonywanych. Wtedy warto wyciagnac operacje poza obiekty, zeby uniezaleznic ich implementacje od zmian struktury. W Twoim wypadku ten wzorzec w ogole nie ma zastosowania.
Podsumowujac: podajesz kilka szczegolow (nie za wiele) i zadasz uniwersalnego rozwiazania, ktorego nie ma. To czy jakiekolwiek z podanych rozwiazan ma sens zalezy od logiki biznesowej, podzialu na klasy, definicji samych klas i odwzorowania na logike biznesowa, projektu aplikacji, itp, itd, mozna wymieniac w nieskonczonosc. Przyklad tej zaleznosci masz podany powyzej w uzasadnieniu o wzorcu Visitor (dlaczego kompletnie nie pasuje).