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
| package main
type Doctor struct { }
func (Doctor) treatEye() {}
func (Doctor) treatNose() {}
type TreatList interface { Treat() }
type TreatEyeList struct { doctor *Doctor }
func (treatEyeList TreatEyeList) Treat() { treatEyeList.doctor.treatEye() }
type TreatNoseList struct { doctor *Doctor }
func (treatNoseList TreatNoseList) Treat() { treatNoseList.doctor.treatNose() }
type Nurse struct { treatNoseListList []TreatList }
func (nurse *Nurse) Notify() { if nurse.treatNoseListList == nil { return }
for _, treatNoseList := range nurse.treatNoseListList { treatNoseList.Treat() } }
func main() { var doctor = new(Doctor) var treatEyeList = TreatEyeList{doctor: doctor} var treatNoseList = TreatNoseList{doctor: doctor}
var nurse = Nurse{treatNoseListList: make([]TreatList, 0)} nurse.treatNoseListList = append(nurse.treatNoseListList, treatEyeList) nurse.treatNoseListList = append(nurse.treatNoseListList, treatNoseList)
nurse.Notify() }
|