Composition
ある親構造体を埋め込んでいる子構造体に異なった処理を施したい場合compositionという設計思想を用いると楽に設計できる。
例えば「 People」という構造体を含む「Japanese」と「American」,「German」という構造体があったとする。
この3つの構造体は歩くという共通の処理を持ち、公用語として英語が共通の処理とされている。
しかしJapaneseだけは日本語しか話すことができない。
このような状況の時、compositionという設計思想を用いる。
code:main.go
func main(){
speak := NotSpeakEnglish{}
j := Japanese{
People{speak}
}
j.walk()
//walking!!
j.speak()
//英語を話せません。
}
type People struct {
speakEnglish
}
func (p People) walk () {
fmt.Println(”walking!!”)
}
type speakEnglish interface {
speak()
}
type NotSpeakEnglish struct {}
func (s NotSpeakEnglish) speak (){
fmt.Println(“英語を話せません。“)
}
type CanSpeakEnglish struct {}
func (s CanSpeakEnglish) speak () {
fmt.Println(”Hello”)
}
参考