中介者模式

中介者接口

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()
}

posted @ 2022-10-11 16:07  理科土拨鼠  阅读(22)  评论(0)    收藏  举报