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()

  

 

猜你喜欢

转载自www.cnblogs.com/flycc/p/12631768.html