go-pattern-examples/behavior/08_mediator/mediator.go

70 lines
1.6 KiB
Go
Raw Normal View History

2020-04-21 17:50:21 +03:00
package mediator
import (
"fmt"
)
2020-04-27 12:43:39 +03:00
//在这个模式里面,我们演示一个场景用例
//房东通过中介向房客收房租
//房客通过中介向房东要求换新家具
//中介每次服务都收100块服务费
2020-04-21 17:50:21 +03:00
2020-04-27 12:43:39 +03:00
//Person 定义一个本身的人
type Person struct {
Name string
MoneyCount int //每个人都有钱包
2020-04-21 17:50:21 +03:00
}
2020-04-27 12:43:39 +03:00
//Tenant 租客
type Tenant struct {
Person
2020-04-27 18:36:39 +03:00
m *mediator
2020-04-21 17:50:21 +03:00
}
2020-04-27 12:43:39 +03:00
//Landlord 房东,要收房租
type Landlord struct {
Person
accout int //房东的租金账户
2020-04-27 18:36:39 +03:00
m *mediator
2020-04-21 17:50:21 +03:00
}
2020-04-27 18:36:39 +03:00
//Mediator 中介,比如某居客,某家,某壳,即代表租客跟房东谈条件,又代表房东对付租客
//Mediator 所以中介一定会持有两方的信息,最好用接口代表对象
//Mediator 这里简化一下,假设中介只为一个房东和一个租客服务,直接用类型的引用,表示拥有关系
type Mediator struct {
tenant interface{}
landlord interface{}
feelandlord int
feelandtenant int
2020-04-21 17:50:21 +03:00
}
2020-04-27 12:43:39 +03:00
//AskRepair 要求房东修家具
2020-04-27 18:36:39 +03:00
func (t *Tenant) AskRepair(furniture string) {
fmt.Println("i need landlord fix the:", furniture)
t.m.Changed()
2020-04-21 17:50:21 +03:00
}
2020-04-27 12:43:39 +03:00
//CollectRent 房东收租金了
2020-04-27 18:36:39 +03:00
func (l *Landlord) CollectRent(moneyCount int) {
2020-04-21 17:50:21 +03:00
2020-04-27 12:43:39 +03:00
fmt.Printf("CPU: split data with Sound %s, Video %s\n", c.Sound, c.Video)
2020-04-21 17:50:21 +03:00
}
2020-04-27 18:36:39 +03:00
//Changed 中介要提两边或者多边办事,所以它
func (m *Mediator) Changed(i interface{}) {
2020-04-21 17:50:21 +03:00
}
2020-04-27 18:36:39 +03:00
//PublishRoom 可以在中介这里发布房源
func (m *Mediator) PublishRoom(landlord interface{}) {
m.landlord = landlord
}
//RentRom 可以从中介租房子
func (m *Mediator) RentRom(tenant interface{}) {
m.tenant = tenant
2020-04-21 17:50:21 +03:00
}