-
Notifications
You must be signed in to change notification settings - Fork 1
/
3-7-visitor.vala
88 lines (69 loc) · 1.82 KB
/
3-7-visitor.vala
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Visitee
interface Animal {
public abstract void accept (AnimalOperation operation);
}
interface AnimalOperation {
public abstract void visit_monkey (Monkey monkey);
public abstract void visit_lion (Lion lion);
public abstract void visit_dolphin (Dolphin dolphin);
}
class Monkey : Animal {
public void shout () {
print ("Ooh oo aa aa!\n");
}
public void accept (AnimalOperation operation) {
operation.visit_monkey (this);
}
}
class Lion : Animal {
public void roar () {
print ("Roaaar !\n");
}
public void accept (AnimalOperation operation) {
operation.visit_lion (this);
}
}
class Dolphin : Animal {
public void speak () {
print ("Tuut tuttu tuutt!\n");
}
public void accept (AnimalOperation operation) {
operation.visit_dolphin (this);
}
}
class Speak : AnimalOperation {
public void visit_monkey (Monkey monkey) {
monkey.shout ();
}
public void visit_lion (Lion lion) {
lion.roar ();
}
public void visit_dolphin (Dolphin dolphin) {
dolphin.speak ();
}
}
class Jump : AnimalOperation {
public void visit_monkey (Monkey monkey) {
print ("Jumped 20 feet high! on to the tree!\n");
}
public void visit_lion (Lion lion) {
print ("Jumped 7 feet! Back on the ground!\n");
}
public void visit_dolphin (Dolphin dolphin) {
print ("Walked on water a little and disappeared\n");
}
}
public int main (string[] args) {
var monkey = new Monkey ();
var lion = new Lion ();
var dolphin = new Dolphin ();
var speak = new Speak ();
var jump = new Jump ();
monkey.accept (speak);
monkey.accept (jump);
lion.accept (speak);
lion.accept (jump);
dolphin.accept (speak);
dolphin.accept (jump);
return 0;
}