中介者模式
中介者接口
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号
浙公网安备 33010602011771号