中介者模式

中介者接口

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  理科土拨鼠  阅读(16)  评论(0)    收藏  举报