-
Notifications
You must be signed in to change notification settings - Fork 0
/
visitor.py
61 lines (41 loc) · 1.25 KB
/
visitor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# coding: utf-8
"""
Постетитель (Visitor) - паттерн поведения объектов.
Описывает операцию, выполняемую с каждым объектом из некоторой структуры.
Паттерн посетитель позволяет определить новую операцию, не изменяя классы этих объектов.
"""
class FruitVisitor(object):
"""Посетитель"""
def draw(self, fruit):
methods = {
Apple: self.draw_apple,
Pear: self.draw_pear,
}
draw = methods.get(type(fruit), self.draw_unknown)
draw(fruit)
def draw_apple(self, fruit):
print 'Яблоко'
def draw_pear(self, fruit):
print 'Груша'
def draw_unknown(self, fruit):
print 'Фрукт'
class Fruit(object):
"""Фрукты"""
def draw(self, visitor):
visitor.draw(self)
class Apple(Fruit):
"""Яблоко"""
class Pear(Fruit):
"""Груша"""
class Banana(Fruit):
"""Банан"""
visitor = FruitVisitor()
apple = Apple()
apple.draw(visitor)
# Яблоко
pear = Pear()
pear.draw(visitor)
# Груша
banana = Banana()
banana.draw(visitor)
# Фрукт