This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:design-patterns-part-one [2025/11/24 10:58] florian_luis.micu [Dezavantaje] |
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 843: | Line 843: | ||
| - 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. | ||
| - | Pe scurt: 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). | + | **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> | ||