This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:design-patterns-part-one [2025/11/24 10:55] florian_luis.micu [A doua iterație: Overloading static] |
poo-ca-cd:laboratoare:design-patterns-part-one [2025/11/24 11:05] (current) florian_luis.micu [Single Dispatch] |
||
|---|---|---|---|
| Line 690: | Line 690: | ||
| </code> | </code> | ||
| - | Însă această soluție permite **un singur comportament de afișare** per clasă. Dacă vrem să afișăm același obiect în mai multe formate (TEXT, JSON, XML), nu putem suprascrie `show()` de trei ori. Ar trebui să delegăm afișarea către clase externe (''ExporterText'', ''ExporterJson'', ''ExporterXml''), iar dacă folosim overloading pentru acestea, revenim la aceeași problemă: **overloading-ul se decide la compile-time**, ignorând tipul real al obiectului. | + | Însă această soluție permite **un singur comportament de afișare** per clasă. Dacă vrem să afișăm același obiect în mai multe formate (TEXT, JSON, XML), nu putem suprascrie ''show()'' de trei ori. Ar trebui să delegăm afișarea către clase externe (''ExporterText'', ''ExporterJson'', ''ExporterXml''), iar dacă folosim overloading pentru acestea, revenim la aceeași problemă: **overloading-ul se decide la compile-time**, ignorând tipul real al obiectului. |
| </note> | </note> | ||
| Line 733: | Line 733: | ||
| <note tip> | <note tip> | ||
| - | Aceasta este situația clasică unde single dispatch și overloading nu sunt suficiente. Avem nevoie de double dispatch. | + | Aceasta este situația clasică unde **single dispatch și overloading nu sunt suficiente**. Avem nevoie de **double dispatch**. |
| </note> | </note> | ||
| Line 842: | Line 842: | ||
| - Operațiile se adaugă mai des decât clasele obiectelor. | - Operațiile se adaugă mai des decât clasele obiectelor. | ||
| - Dorim să separăm algoritmii de structura de date, păstrând clasele vizitabile simple. | - Dorim să separăm algoritmii de structura de date, păstrând clasele vizitabile simple. | ||
| + | |||
| + | **TL;DR:** Folosim Visitor când vrem să avem **mai mulți algoritmi** (ex. ExporterPDF, ExporterXML, ExporterJSON) pentru **mai multe tipuri de entități** (ex. SeightSeeing, Industry, City). | ||
| </note> | </note> | ||