Zpo-9-wyk-Slajd38
Encapsulate Collection
Problem rozwiązywany przez to przekształcenie został już omówiony w zarysie podczas pierwszego wykładu. Polega on na udostępnieniu do modyfikacji kolekcji poza kontrolą jej właściciela. Właściciel, poprzez metodę typu get (), przekazuje klientom referencję do kolekcji, która następnie może być swobodnie modyfikowana. Celem przekształcenia jest przeniesienie odpowiedzialności za modyfikację kolekcji z niej samej do jej właściciela.
Refaktoryzacja rozpoczyna się od zdefiniowania w klasie właściciela metod add () i remove () dla elementów kolekcji, a następnie przeniesienie wywołań metod kolekcji do nowo utworzonych metod w klasie jej właściciela. Drugim krokiem jest zmiana metody zwracającej referencję do kolekcji w taki sposób, aby nie pozwalała ona na modyfikację tej kolekcji. Istnieje kilka możliwych rozwiązań: użycie specjalizowanego opakowania kolekcji (zob. wzorzec Decorator), który uniemożliwi jej modyfikację (omówionego podczas wykładu nt. kolekcji w języku Java), lub po prostu zwrócenie jej kopii.