Відвідувач (шаблон проєктування): відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Немає опису редагування
Немає опису редагування
Рядок 144:
 
=== С# ===
{{Hider_hiding
| title = Приклад реалізації мовою [[C Sharp |С#]]
| content =
<syntaxhighlight lang="csharp">
class Visitor { // Відвідувач
 
public virtual void VisitElementA(ElementA element); 
public virtual void VisitElementB(ElementB element);  
public virtual void VisitCompositeElement(VisitCompositeElement lement);  
 
// and so on for other concrete elements 
 
class Element { // Елемент 
 
public virtual void Accept(Visitor visitor); 
 
}  
 
class ElementA : public Element { // Конкретний елемент А 
 
public virtual void Accept(Visitor visitor) { visitor.VisitElementA(this); } 
 
}  
 
class ElementB : public Element { // Конкретний елемент Б 
 
public virtual void Accept(Visitor visitir) { visitor.VisitElementB(this); } 
 
 
class CompositeElement : public Element { // Структура елементів 
 
public virtual void Accept(Visitor visitor)  
foreach (Element i in children)
i.CurrentItem().Accept(visitor); 
visitor.VisitCompositeElement(this); 
 
private List<Element> children; 
 
}  
</syntaxhighlight>
}}
 
{{Hider_hiding
| title = Приклад реалізації на мовімовою [[C Sharp | С#]]
| content =
<syntaxhighlight lang="csharp">
Рядок 233 ⟶ 186:
}
 
// Конкретні відвідувачі
// Конкретний відвідувач
class GetAreaVisitor : IGeometryVisitor
{
Рядок 244 ⟶ 197:
{
return Math.PI * circle.Radius * circle.Radius;
}
} }
 
class GetPerimeterVisitor : IGeometryVisitor
{
public double Visit(Square square)
{
return 4 * square.Side;
}
 
public double Visit(Circle circle)
{
return 2 * Math.PI * circle.Radius;
}
}