Zpo-7-wyk-Slajd32: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Remove Middle Man==
==Visitor: uczestnicy==


[[Image:zpo-7-wyk-Slajd32.PNG|Remove Middle Man]]
[[Image:zpo-7-wyk-Slajd32.PNG|Visitor: uczestnicy]]




Przekształcenie Remove Middle Man jest przeciwieństwem poprzedniej refaktoryzacji. Jego rolą jest usunięcie prostych delegacji z klasy serwera i publiczne udostępnienie delegata. Przekształcenie to ma sens, jeżeli klasa serwera jest prostym tłumaczem protokołów obiektowych i nie dodaje żadnej nowej funkcjonalności w porównaniu do klasy delegata (a jednocześnie nie zachodzą inne przesłanki, np. konieczność dostosowania typów – zob. wzorzec Adapter).
Rolą interfejsu Visitor jest zdefiniowanie przeciążonych metod dla każdego obiektu typu ConcreteElement, który należy odwiedzić. Zatem Visitor jako cały obiekt reprezentuje pewną operację, którą należy wykonać na wszystkich elementach struktury danych, w sposób od nich zależny.


Jego mechanika polega na odwróceniu mechaniki przekształcenia Hide Delegate. Pierwszym krokiem jest utworzenie (lub upublicznienie, jeżeli istniała wcześniej) metody dostępowej do klasy-delegata. Następnie należy zmienić wszystkie klasy klienckie, tak aby wywoływały metody bezpośrednio w klasie delegata, uzyskując do niego referencję poprzez utworzoną w poprzednim kroku metodę dostępową. Po zakończeniu tej czynności metody delegujące z klasy serwera mogą zostać usunięte. Jeżeli serwer po przekształceniu nie posiada już żadnej lub szczątkową funkcjonalność, można go usunąć, stosując np. przekształcenie Inline Class.
Elementy tej struktury posiadają tylko jedną wspólną metodę ''accept'' ''(),'' która przyjmuje parametr typu Visitor i umożliwia mu (poprzez odwrócenie sterowania) wywołanie metod obiektu ''Element'' . Dodatkową zaletą tego rozwiązania jest możliwość zabezpieczenia się niektórych obiektów Element przed odwiedzeniem przez konkretny Visitor, co może mieć znaczenie w niektórych obszarach zastosowań.
 
Obiekt ObjectStructure jest kolekcją, która udostępnia wszystkie swoje elementy i pozwala przekazywać im obiekt Visitor.




[[zpo-7-wyk-Slajd31 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd33 | Następny slajd >>]]
[[zpo-7-wyk-Slajd31 | << Poprzedni slajd]] | [[zpo-7-wyk-toc|Spis treści ]] | [[zpo-7-wyk-Slajd33 | Następny slajd >>]]

Aktualna wersja na dzień 19:16, 4 lis 2006

Visitor: uczestnicy

Visitor: uczestnicy


Rolą interfejsu Visitor jest zdefiniowanie przeciążonych metod dla każdego obiektu typu ConcreteElement, który należy odwiedzić. Zatem Visitor jako cały obiekt reprezentuje pewną operację, którą należy wykonać na wszystkich elementach struktury danych, w sposób od nich zależny.

Elementy tej struktury posiadają tylko jedną wspólną metodę accept (), która przyjmuje parametr typu Visitor i umożliwia mu (poprzez odwrócenie sterowania) wywołanie metod obiektu Element . Dodatkową zaletą tego rozwiązania jest możliwość zabezpieczenia się niektórych obiektów Element przed odwiedzeniem przez konkretny Visitor, co może mieć znaczenie w niektórych obszarach zastosowań.

Obiekt ObjectStructure jest kolekcją, która udostępnia wszystkie swoje elementy i pozwala przekazywać im obiekt Visitor.


<< Poprzedni slajd | Spis treści | Następny slajd >>