File tree 5 files changed +146
-0
lines changed
5 files changed +146
-0
lines changed Original file line number Diff line number Diff line change
1
+ package Composite
2
+
3
+ type Item interface {
4
+ Add (Item )
5
+ String () string
6
+ Price () int
7
+ }
Original file line number Diff line number Diff line change
1
+ package Composite
2
+
3
+ import (
4
+ "fmt"
5
+ "testing"
6
+ )
7
+
8
+ func TestComposite (t * testing.T ) {
9
+ p := Project {name : "Upload images" }
10
+ t1 := Task {name : "Mockup" , responsable : "UI Designer" , price : 1000 }
11
+
12
+ t2 := Task {name : "Markup" , responsable : "Web Designer" }
13
+ st21 := SubTask {name : "HTML" , price : 300 }
14
+ st22 := SubTask {name : "CSS" , price : 700 }
15
+ t2 .Add (& st21 )
16
+ t2 .Add (& st22 )
17
+
18
+ t3 := Task {name : "JS" , responsable : "Frontend Developer" , price : 1000 }
19
+
20
+ t4 := Task {name : "API Backend" , responsable : "Backend Developer" }
21
+ st41 := SubTask {name : "Authentication" , price : 100 }
22
+ st42 := SubTask {name : "DB connection" , price : 900 }
23
+ t4 .Add (& st41 )
24
+ t4 .Add (& st42 )
25
+
26
+ t5 := Task {name : "Database" , responsable : "DBA" , price : 1000 }
27
+
28
+ p .Add (& t1 )
29
+ p .Add (& t2 )
30
+ p .Add (& t3 )
31
+ p .Add (& t4 )
32
+ p .Add (& t5 )
33
+
34
+ fmt .Println (& p )
35
+ }
Original file line number Diff line number Diff line change
1
+ package Composite
2
+
3
+ import (
4
+ "strconv"
5
+ "strings"
6
+ )
7
+
8
+ type Project struct {
9
+ name string
10
+ tasks []Item
11
+ }
12
+
13
+ func (p * Project ) Add (i Item ){
14
+ p .tasks = append (p .tasks , i )
15
+ }
16
+
17
+ func (p * Project ) String () string {
18
+ sb := strings.Builder {}
19
+ sb .WriteString (p .name )
20
+ sb .WriteString (" $" )
21
+ sb .WriteString (strconv .Itoa (p .Price ()))
22
+ sb .WriteString ("\n " )
23
+ for _ , v := range p .tasks {
24
+ sb .WriteString (v .String ())
25
+ }
26
+
27
+ return sb .String ()
28
+ }
29
+
30
+ func (p * Project ) Price () int {
31
+ price := 0
32
+ for _ ,v := range p .tasks {
33
+ price += v .Price ()
34
+ }
35
+ return price
36
+ }
Original file line number Diff line number Diff line change
1
+ package Composite
2
+
3
+ import (
4
+ "fmt"
5
+ "strings"
6
+ )
7
+
8
+ type SubTask struct {
9
+ name string
10
+ price int
11
+ }
12
+
13
+ func (s * SubTask ) Add (i Item ) {
14
+ fmt .Println ("You don't accept subtrareas" )
15
+ }
16
+
17
+ func (s * SubTask ) String () string {
18
+ sb := strings.Builder {}
19
+ sb .WriteString ("\t \t |-- " )
20
+ sb .WriteString (s .name )
21
+ sb .WriteString ("\n " )
22
+
23
+ return sb .String ()
24
+ }
25
+
26
+ func (s * SubTask ) Price () int {
27
+ return s .price
28
+ }
Original file line number Diff line number Diff line change
1
+ package Composite
2
+
3
+ import (
4
+ "strconv"
5
+ "strings"
6
+ )
7
+
8
+ type Task struct {
9
+ name string
10
+ responsable string
11
+ price int
12
+ subTasks []Item
13
+ }
14
+
15
+ func (t * Task ) Add (i Item ){
16
+ t .subTasks = append (t .subTasks ,i )
17
+ }
18
+
19
+ func (t * Task ) String () string {
20
+ sb := strings.Builder {}
21
+ sb .WriteString ("\t |--" )
22
+ sb .WriteString (t .name )
23
+ sb .WriteString (" - " )
24
+ sb .WriteString (t .responsable )
25
+ sb .WriteString (" $" )
26
+ sb .WriteString (strconv .Itoa (t .Price ()))
27
+ sb .WriteString ("\n " )
28
+ for _ ,v := range t .subTasks {
29
+ sb .WriteString (v .String ())
30
+ }
31
+ return sb .String ()
32
+ }
33
+
34
+ func (t * Task ) Price () int {
35
+ price := t .price
36
+ for _ ,v := range t .subTasks {
37
+ price += v .Price ()
38
+ }
39
+ return price
40
+ }
You can’t perform that action at this time.
0 commit comments