Skip to content

Commit f679e00

Browse files
committed
composite
1 parent 5b13794 commit f679e00

File tree

5 files changed

+146
-0
lines changed

5 files changed

+146
-0
lines changed

Composite/composite.go

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package Composite
2+
3+
type Item interface {
4+
Add(Item)
5+
String() string
6+
Price() int
7+
}

Composite/composite_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
}

Composite/project.go

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}

Composite/subtask.go

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
}

Composite/task.go

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
}

0 commit comments

Comments
 (0)