私は複合デザインパターンを実装しようとしています。私はオブジェクトのオブジェクトをどのように構成するのかを理解していました。この例では、アスリートと水泳機能を持っています。オブジェクトコンポーネントは、コンポジットパターンで互いに話すことができますか?
type Athlete struct {
name string
}
type CompositeAthlete struct {
athlete Athlete
Train func(name string)
}
しかし、私は構成オブジェクトの作成後に名前を渡す必要がある場合:
comp := CompositeAthlete{
athlete: athlete,
Train: Swim,
}
comp.Train(athlete.name)
注入されたオブジェクトの内部読み取ることができる方法を注入することが可能です。
package main
import (
"fmt"
"strings"
)
type Athlete struct {
name string
}
type CompositeAthlete struct {
athlete Athlete
Train func(name string)
}
func (a *Athlete) Train() {
fmt.Println("training ...")
}
func Swim(name string) {
fmt.Println(strings.Join([]string{
name,
" is swimming",
}, ""))
}
func main() {
fmt.Println("vim-go")
athlete := Athlete{"Mariottide"}
athlete.Train()
comp := CompositeAthlete{
athlete: athlete,
Train: Swim,
}
comp.Train(athlete.name)
}
私はその外側から名前を受け取るべきではありませんから構成されるオブジェクトとしてcomp
が、アスリートからをしたいと思います。出来ますか?