Skip to content

Commit 80f5783

Browse files
committed
Impl conceptual visitor pattern project.
1 parent 1edebd8 commit 80f5783

File tree

10 files changed

+165
-0
lines changed

10 files changed

+165
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import '../pattern/element.dart';
2+
import '../pattern/visitor.dart';
3+
4+
class One implements Element {
5+
final String param1 = '1';
6+
7+
@override
8+
void accept(Visitor visitor) {
9+
visitor.visitOne(this);
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import '../pattern/element.dart';
2+
import '../pattern/visitor.dart';
3+
4+
class Three implements Element {
5+
final String param3 = '3';
6+
7+
@override
8+
void accept(Visitor visitor) {
9+
visitor.visitThree(this);
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import '../pattern/element.dart';
2+
import '../pattern/visitor.dart';
3+
4+
class Two implements Element {
5+
final String param2 = '2';
6+
7+
@override
8+
void accept(Visitor visitor) {
9+
visitor.visitTwo(this);
10+
}
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'elements/one.dart';
2+
import 'elements/three.dart';
3+
import 'elements/two.dart';
4+
import 'operations/concrete_visitor1.dart';
5+
import 'operations/concrete_visitor2.dart';
6+
import 'pattern/element.dart';
7+
import 'pattern/visitor.dart';
8+
9+
void main() {
10+
final list = createElements();
11+
operation(list, ConcreteVisitor1());
12+
operation(list, ConcreteVisitor2());
13+
}
14+
15+
Iterable<Element> createElements() {
16+
return [
17+
One(),
18+
Two(),
19+
Three(),
20+
];
21+
}
22+
23+
void operation(Iterable<Element> elements, Visitor visitor) {
24+
for (final e in elements) {
25+
e.accept(visitor);
26+
}
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import '../elements/one.dart';
2+
import '../elements/three.dart';
3+
import '../elements/two.dart';
4+
import '../pattern/visitor.dart';
5+
6+
class ConcreteVisitor1 implements Visitor {
7+
@override
8+
void visitOne(One one) {
9+
print('operation1: one (param1 = ${one.param1})');
10+
}
11+
12+
@override
13+
void visitTwo(Two two) {
14+
print('operation1: two (param2 = ${two.param2})');
15+
}
16+
17+
@override
18+
void visitThree(Three three) {
19+
print('operation1: three (param3 = ${three.param3})');
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import '../elements/one.dart';
2+
import '../elements/three.dart';
3+
import '../elements/two.dart';
4+
import '../pattern/visitor.dart';
5+
6+
class ConcreteVisitor2 implements Visitor {
7+
@override
8+
void visitOne(One one) {
9+
print('operation2: one (param1 = ${one.param1})');
10+
}
11+
12+
@override
13+
void visitTwo(Two two) {
14+
print('operation2: two (param2 = ${two.param2})');
15+
}
16+
17+
@override
18+
void visitThree(Three three) {
19+
print('operation2: three (param3 = ${three.param3})');
20+
}
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'visitor.dart';
2+
3+
abstract class Element {
4+
void accept(Visitor visitor);
5+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import '../elements/one.dart';
2+
import '../elements/three.dart';
3+
import '../elements/two.dart';
4+
5+
abstract class Visitor {
6+
void visitOne(One one);
7+
8+
void visitTwo(Two two);
9+
10+
void visitThree(Three three);
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class One {
2+
final String param1 = '1';
3+
}
4+
5+
class Two {
6+
final String param2 = '2';
7+
}
8+
9+
class Three {
10+
final String param3 = '3';
11+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import 'elements/elements.dart';
2+
3+
void main() {
4+
final list = createElements();
5+
6+
list.forEach(operation1);
7+
list.forEach(operation2);
8+
}
9+
10+
Iterable<Object> createElements() {
11+
return [
12+
One(),
13+
Two(),
14+
Three(),
15+
];
16+
}
17+
18+
void operation1(Object obj) {
19+
if (obj is One) {
20+
print('operation1: one (param1 = ${obj.param1})');
21+
} else if (obj is Two) {
22+
print('operation1: two (param2 = ${obj.param2})');
23+
} else if (obj is Three) {
24+
print('operation1: two (param3 = ${obj.param3})');
25+
}
26+
}
27+
28+
void operation2(Object obj) {
29+
if (obj is One) {
30+
print('operation2: one (param1 = ${obj.param1})');
31+
} else if (obj is Two) {
32+
print('operation2: two (param2 = ${obj.param2})');
33+
} else if (obj is Three) {
34+
print('operation2: two (param3 = ${obj.param3})');
35+
}
36+
}

0 commit comments

Comments
 (0)