Design Patterns
.: Visitor :.
Plan prezentacji
1. Trochę statystyk.
2. Zadanie problemowe.
3. Rozwiązanie… Visitor.
4. Visitor w UML (a,b,c).
5. Implementacja (a,b,c,d).
6. Diagram stanów
7. Gdzie gościł „Visitor”?
1.Trochę statystyk
Singleton
Proxy
Facade
Strategy
Command
2. Zadanie problemowe
Jedna struktura danych stanowi podstawę dla wielu nie związanych ze sobą zadań. Metody których zadań należy uwzględnić w
elementach struktury?
Przypisanie wielu różnych funkcjonalnie metod
do jednej klasy
3. Rozwiązanie … Visitor
Visitor
Reprezentuje operację, którą możemy
wykonać na elementach pewnej obiektowej struktury.
Pozwala na zdefiniowanie nowej operacji bez
konieczności ingerencji w klasy, na których
operuje.
4.a. Visitor w UML
Pierwotna struktura…
4.b. Visitor w UML
…oraz metody w nowej szacie…
4.c. Visitor w UML
…stanowią gotowy wzorzec
5.a. Implementacja
class Node { public:
virtual ~Node();
virtual void Accept(class Visitor&)=0;
protected:
Node(){};
};
5.b. Implementacja…
class AssignmentNode : public Node {
public:
AssignmentNode();
virtual void Accept(class Visitor& v) {
v.VisitAssignment(this);
};
}; class VariableNode : public Node {
public:
VariableNode();
virtual void Accept(class Visitor& v) {
v.VisitVariableRef(this);
}
5.c. Implementacja…
class Visitor {
public:
5.d. Implementacja!
class TypeCheckingVisitor : public Visitor {
public:
TypeCheckingVisitor();
virtual void VisitAssignment(class AssignmentNode*){/* kod */};
virtual void VisitVariableRef(class VariableNode*){/* kod */};
};
class CodeGeneratingVisitor : public Visitor {
public:
CodeGeneratingVisitor();
virtual void VisitAssignment(class AssignmentNode*){/* kod */};
virtual void VisitVariableRef(class VariableNode*){/* kod */};
};
6. Diagram stanów
7. Gdzie „gościł” Visitor?
Smalltalk-80 (ProgramNodeEnumerator)
IRIS Inventor
Na deser…
http://www.dofactory.com/Patterns/Patterns.aspx#list
http://www.swe.uni-linz.ac.at/research/deco/designPatterns/Visitor/