forked from qq570850096/awesome-golang-DesignPattern
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStrategy.go
99 lines (75 loc) · 1.32 KB
/
Strategy.go
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
89
90
91
92
93
94
95
96
97
98
99
package BehavioralType
import "fmt"
type FlyBehavior interface {
Fly()
}
type QuackBehavior interface {
Quack()
}
type Duck struct {
fly FlyBehavior
quack QuackBehavior
}
func (d *Duck)Swim() {
fmt.Println("鸭子游泳")
}
func (d *Duck) Display (behavior FlyBehavior,quackBehavior QuackBehavior) {
behavior.Fly()
quackBehavior.Quack()
}
type FlyWithWings struct {}
func (f *FlyWithWings) Fly () {
fmt.Println("鸭子用翅膀飞")
}
type FlyNoWay struct {}
func (f *FlyNoWay) Fly () {
fmt.Println("鸭子飞不起来")
}
type Quack struct {}
func (f *Quack) Quack () {
fmt.Println("鸭子嘎嘎叫")
}
type Squeak struct {}
func (f *Squeak) Quack () {
fmt.Println("鸭子咔咔叫")
}
type Mute struct {}
func (f *Mute) Quack () {
fmt.Println("鸭子不能叫")
}
type ReadHead struct {
*Duck
fly *FlyWithWings
quack *Quack
}
func (r *ReadHead) Display () {
r.Swim()
r.Duck.Display(r.fly, r.quack)
}
type Wooden struct {
*Duck
fly *FlyNoWay
quack *Mute
}
func (r *Wooden) Display () {
r.Swim()
r.Duck.Display(r.fly,r.quack)
}
type Mallard struct {
*Duck
fly *FlyWithWings
quack *Quack
}
func (m *Mallard) Display () {
m.Swim()
m.Duck.Display(m.fly, m.quack)
}
type Rubber struct {
*Duck
fly *FlyNoWay
quack *Squeak
}
func (r *Rubber) Display () {
r.Swim()
r.Duck.Display(r.fly, r.quack)
}