@@ -5,56 +5,55 @@ import (
5
5
)
6
6
7
7
type Parts interface {
8
- AcceptVisitor (PartsVisitor )
8
+ AcceptVisitor (Visitor )
9
9
}
10
10
11
- type Message struct {
12
- Content string
11
+ type Visitor interface {
12
+ Visit ( message * Message )
13
13
}
14
14
15
- func ( aLog * Message ) AcceptVisitor ( visitor PartsVisitor ) {
16
- visitor . Append ( aLog )
15
+ type Message struct {
16
+ Content string
17
17
}
18
18
19
19
type LogMessage struct {
20
20
parts []Parts
21
21
}
22
22
23
- func NewLogMessage () * LogMessage {
24
- aLog := new (LogMessage )
25
- aLog .parts = []Parts {
26
- & Message {"[yyyy-mm-dd]" },
27
- & Message {"INFO" },
28
- }
29
- return aLog
23
+ type ConcreteVisitor struct {
24
+ FullMessage []string
25
+ }
26
+
27
+ func (aLog * Message ) AcceptVisitor (visitor Visitor ) {
28
+ visitor .Visit (aLog )
30
29
}
31
30
32
- func (aLog * LogMessage ) AcceptVisitor (visitor PartsVisitor ) {
31
+ func (aLog * LogMessage ) AcceptVisitor (visitor Visitor ) {
33
32
for _ , part := range aLog .parts {
34
33
part .AcceptVisitor (visitor )
35
34
}
36
35
}
37
36
38
- //Interface of the visitor
39
- type PartsVisitor interface {
40
- Append (message * Message )
41
- }
42
-
43
- //Concrete Implementation of the visitor
44
- type GetMessageVisitor struct {
45
- FullMessage []string
37
+ func (aLog * ConcreteVisitor ) Visit (message * Message ) {
38
+ aLog .FullMessage = append (
39
+ aLog .FullMessage ,
40
+ message .Content ,
41
+ )
46
42
}
47
43
48
- func (aLog * GetMessageVisitor ) Append (message * Message ) {
49
- aLog .FullMessage = append (aLog .FullMessage , fmt .Sprintf ("Visiting the %v message" , message .Content ))
44
+ func NewInfoLogString (message * Message ) * LogMessage {
45
+ aLog := new (LogMessage )
46
+ aLog .parts = []Parts {
47
+ & Message {"[yyyy-mm-dd]" },
48
+ & Message {"INFO" },
49
+ message ,
50
+ }
51
+ return aLog
50
52
}
51
53
52
54
func main () {
53
- msg := NewLogMessage ( )
54
- visitor := new (GetMessageVisitor )
55
+ msg := NewInfoLogString ( & Message { "Messaggio" } )
56
+ visitor := new (ConcreteVisitor )
55
57
msg .AcceptVisitor (visitor )
56
- fmt .Println (
57
- "The final message is:" ,
58
- visitor .FullMessage ,
59
- )
58
+ fmt .Println (visitor .FullMessage )
60
59
}
0 commit comments