中介者模式
中介者接口
package mediator
type Mediator interface {
Process(Person)
}
中介者
package mediator
import "fmt"
type mediator struct {
owner *Owner
tenant *Tenant
}
func NewMediator() *mediator {
return &mediator{}
}
func (m *mediator) Process(p Person) {
switch p.(type) {
case *Owner:
m.tenant.respond()
case *Tenant:
m.owner.respond()
default:
fmt.Println("中介勿扰")
}
}
角色接口
package mediator
type Person interface {
respond()
}
基础结构体
package mediator
type Role struct {
name string
mediator Mediator
}
房东
package mediator
import "fmt"
type Owner struct {
Role
}
func NewOwner(name string, mediator Mediator) *Owner {
owner := &Owner{}
owner.name = name
owner.mediator = mediator
return owner
}
func (o *Owner) respond() {
fmt.Printf("%s说:房租最低1500!!\n", o.name)
o.mediator.Process(o)
}
租客
package mediator
import "fmt"
type Tenant struct {
Role
}
func NewTenant(name string, mediator Mediator) *Tenant {
tenant := &Tenant{}
tenant.name = name
tenant.mediator = mediator
return tenant
}
func (t *Tenant) begin() {
fmt.Printf("%s说:房租最低多少?\n", t.name)
t.mediator.Process(t)
}
func (t *Tenant) respond() {
fmt.Printf("%s说:便宜点!!!\n", t.name)
}
测试文件
package mediator
import (
"testing"
)
func TestAdapter(t *testing.T) {
m := NewMediator()
o := NewOwner("tom", m)
h := NewTenant("jack", m)
m.tenant = h
m.owner = o
h.begin()
}

浙公网安备 33010602011771号