桥接模式分离抽象部分和实现部分。使得两部分独立扩展。
桥接模式类似于策略模式,区别在于策略模式封装一系列算法使得算法可以互相替换。
策略模式使抽象部分和实现部分分离,可以独立变化。
package bridge import( "fmt" ) type Road interface{ //选择路线 Way()string } type Trans interface{ //选择交通工具 Transport()string } type Resault struct{//创建一个桥,可以有多种组合 way Road trans Trans } //桥接函数 func HowtoSchool(road Road,trans Trans) *Resault{ return &Resault{ way : road, trans : trans, } } func (this *Resault)GotoSchool(){ fmt.Println("Choose",this.way.Way(),this.trans.Transport(),"to school") } //实例化路线1 type Way1 struct{ } //路线1 的方法,实现怎么走 func (this *Way1)Way()string{ return "[way1]" } //选择路线1,返回路线1 的实例 func ChooseWay1()Road { return &Way1{} } //实例化路线2 type Way2 struct{ } //路线2 的方法,实现怎么走 func (this *Way2)Way()string{ return "[way2]" } //选择路线2,返回路线2 的实例 func ChooseWay2()Road { return &Way2{} } //走路上学实例化 type Walk struct{ } //选择走路上学,返回走路的实例 func ChooseWalk() Trans{ return &Walk{} } //实现走路的方法 func (this *Walk)Transport()string { return "[walk]" } //走路上学实例化 type Bike struct{ } //选择走路上学,返回走路的实例 func ChooseBike() Trans{ return &Bike{} } //实现走路的方法 func (this *Bike)Transport()string { return "[Bike]" }
how := bridge.HowtoSchool(bridge.ChooseWay1(),bridge.ChooseWalk()) how.GotoSchool() how = bridge.HowtoSchool(bridge.ChooseWay2(),bridge.ChooseWalk()) how.GotoSchool() how = bridge.HowtoSchool(bridge.ChooseWay1(),bridge.ChooseBike()) how.GotoSchool() how = bridge.HowtoSchool(bridge.ChooseWay2(),bridge.ChooseBike()) how.GotoSchool()