Skip to content

Commit 9dea6d7

Browse files
committed
some refactoring
1 parent b225a65 commit 9dea6d7

File tree

1 file changed

+28
-29
lines changed

1 file changed

+28
-29
lines changed

structural/visitor/visitor.go

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,56 +5,55 @@ import (
55
)
66

77
type Parts interface {
8-
AcceptVisitor(PartsVisitor)
8+
AcceptVisitor(Visitor)
99
}
1010

11-
type Message struct {
12-
Content string
11+
type Visitor interface {
12+
Visit(message *Message)
1313
}
1414

15-
func (aLog *Message) AcceptVisitor(visitor PartsVisitor) {
16-
visitor.Append(aLog)
15+
type Message struct {
16+
Content string
1717
}
1818

1919
type LogMessage struct {
2020
parts []Parts
2121
}
2222

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)
3029
}
3130

32-
func (aLog *LogMessage) AcceptVisitor(visitor PartsVisitor) {
31+
func (aLog *LogMessage) AcceptVisitor(visitor Visitor) {
3332
for _, part := range aLog.parts {
3433
part.AcceptVisitor(visitor)
3534
}
3635
}
3736

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+
)
4642
}
4743

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
5052
}
5153

5254
func main() {
53-
msg := NewLogMessage()
54-
visitor := new(GetMessageVisitor)
55+
msg := NewInfoLogString(&Message{"Messaggio"})
56+
visitor := new(ConcreteVisitor)
5557
msg.AcceptVisitor(visitor)
56-
fmt.Println(
57-
"The final message is:",
58-
visitor.FullMessage,
59-
)
58+
fmt.Println(visitor.FullMessage)
6059
}

0 commit comments

Comments
 (0)