中介者模式定义一个中介对象来封装系列对象之间的交互。各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变它们之间的交互。
说起中介,就想到买房。
package mediator import ( "fmt" "gopkg.in/mgo.v2/bson" ) type Mediator interface{ } type RoomHash map[bson.ObjectId]*Room type ConsumerHash map[bson.ObjectId]*Consumer type RoomMediator struct { roomHash RoomHash consumerHash ConsumerHash } func NewRoomMediator()*RoomMediator{ res := RoomMediator{} res.roomHash=make(RoomHash) res.consumerHash=make(ConsumerHash) return &res } func (this *RoomMediator)SetRoom(room *Room){ if len(this.consumerHash)>0{ var c *Consumer for _,v := range this.consumerHash{ fmt.Println(v.Name +" buy " + room.Name) c = v break } delete(this.consumerHash,c.Id) return } this.roomHash[room.Id]=room } func (this *RoomMediator)SetConsumerHash(consumer *Consumer){ if len(this.roomHash)>0{ var r *Room for _,v := range this.roomHash{ fmt.Println(consumer.Name +" buy "+ v.Name) r = v break } delete(this.roomHash,r.Id) return } this.consumerHash[consumer.Id]=consumer }定义消费者。
package mediator import "gopkg.in/mgo.v2/bson" type Consumer struct{ Id bson.ObjectId Name string } func NewConsumer(name string)*Consumer{ return &Consumer{bson.NewObjectId(),name} }定义房子。
package mediator import "gopkg.in/mgo.v2/bson" type Room struct{ Id bson.ObjectId Name string } func NewRoom(name string)*Room{ return &Room{bson.NewObjectId(),name} }