File tree Expand file tree Collapse file tree 10 files changed +165
-0
lines changed
patterns/visitor/conceptual Expand file tree Collapse file tree 10 files changed +165
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ import 'visitor.dart' ;
2+
3+ abstract class Element {
4+ void accept (Visitor visitor);
5+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments