Go 设计模式--Bridge模式
桥接模式分离抽象部分和实现部分。使得两部分独立扩展。
桥接模式类似于策略模式,区别在于策略模式封装一系列算法使得算法可以互相替换。
策略模式使抽象部分和实现部分分离,可以独立变化。
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()


浙公网安备 33010602011771号