创建文件CPU.go
package mediator
import "fmt"
type CPU struct {
data string
}
func (c *CPU) Process(data string) {
fmt.Println("CPU is running", data)
}
创建文件GPU.go
package mediator
import "fmt"
type GPU struct {
data string
}
func (g *GPU) Display(data string) {
fmt.Println("GPU is running", data)
}
创建文件MEM.go
package mediator
import "fmt"
type MEM struct {
data string
}
func (m *MEM) Dump(data string) {
fmt.Println("MEM is running", data)
}
创建文件Disk.go
package mediator
import "fmt"
type Disk struct {
data string
}
func (d *Disk) Store(data string) {
fmt.Println("disk is running", data)
}
创建文件Mediator.go
package mediator
type Mediator struct {
Mcpu *CPU
Mgpu *GPU
Mdisk *Disk
Mmem *MEM
}
var mediator *Mediator
func GetMediatorInstance() *Mediator {
if mediator == nil {
mediator = &Mediator{}
}
return mediator
}
func (m *Mediator) Changed(i interface{}) {
switch inst := i.(type) {
case *CPU:
m.Mcpu.Process(inst.data)
case *GPU:
m.Mgpu.Display(inst.data)
case *Disk:
m.Mdisk.Store(inst.data)
case *MEM:
m.Mmem.Dump(inst.data)
default:
}
}
main.go
package main
import mediator2 "test/design/mediator"
func main() {
mediator := mediator2.GetMediatorInstance()
mediator.Mcpu = &mediator2.CPU{}
mediator.Mcpu.Process("hello")
mediator.Mgpu.Display("hello")
mediator.Mdisk.Store("hello")
mediator.Mmem.Dump("hello")
mediator.Changed(mediator.Mcpu)
mediator.Mmem = &mediator2.MEM{}
mediator.Changed(mediator.Mmem)
}