go在多平臺登陸中使用策略模式

目錄結構

─project
    │  main.go
    │
    ├─controller
    │  │  UserController.go
    │  │
    │  └─strategy
    │          LoginStrategy.go
    │

具體代碼

controller/strategy/LoginStrategy.go

//定義登陸策略需要實現的接口
type LoginStrategy interface {
	Do(ctx *gin.Context)
}



//具體登陸策略的執行者,他身上帶着抽象的登陸策略
type LoginOperator struct {
	loginStrategy Loginstrategy
}

//設置策略
func (operator *LoginOperator) SetOperator(strategy LoginStrategy) {
	operator.loginStrategy = strategy
}

//執行登陸方法
func (operator *LoginOperator) DoLogin(ctx *gin.Context) {
	operator.loginStrategy.Do(ctx)
}

type (
	WebLogin struct {}
	WXMpLogin struct {}
	WXAppLogin struct {}
)

//實現接口
func (*WebLogin) Do(ctx *gin.Context) {
	//do something
}

func (*SinaLogin) Do(ctx *gin.Context) {
	//do something
}

controller/UserController.go

func Login(ctx *gin.Context) {
	//先聲明是什麼策略的執行者
	operator := strategy.LoginOperator{}
	//設置準備選擇具體哪個登陸策略執行
	operator.SetStrategy(&strategy.WebLogin{})
	//執行策略的方法
	operator.DoLogin(ctx)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章