猿问

Go中如何正确使用组合

我是新来的;有两个共享相似行为的文件,并被告知使用组合来避免重复代码,但不能完全理解组合的概念。


这两个文件具有共同的功能,但又各有不同。


播放器1.go


package game


type confPlayer1 interface {

    Set(string, int) bool

    Move(string) bool

    Initialize() bool

}


func Play(conf confPlayer1) string {

    // code for Player1

}


// ... other funcs

播放器2.go


package game


type confPlayer2 interface {

    Set(string, int) bool

    Move(string) bool

    // Initializer is only for Player1

}


func Play(conf confPlayer2) string {

    // code for Player2, not the same as Player1.

}


// ... the same other funcs from player1.go file

// ... they differ slighly from player1.go funcs

有没有办法将所有内容合并到一个player.go文件中?


qq_遁去的一_1
浏览 103回答 1
1回答

收到一只叮咚

Golang 使用组合。对象组合:使用对象组合代替继承(在大多数传统语言中使用)。对象组合意味着一个对象包含另一个对象(比如对象 X)的对象,并将对象 X 的职责委托给它。这里不是覆盖函数(如在继承中),而是将函数调用委托给内部对象。接口组合:在接口组合中,接口可以组合其他接口,并使在内部接口中声明的所有方法集成为该接口的一部分。现在具体回答你的问题,你这里说的是界面组成。您还可以在此处查看代码片段:https ://play.golang.org/p/fn_mXP6XxmS检查以下代码:播放器2.gopackage gametype confPlayer2 interface {    Set(string, int) bool    Move(string) bool    }func Play(conf confPlayer2) string {    // code for Player2, not the same as Player1.}播放器1.gopackage gametype confPlayer1 interface {    confPlayer2    Initialize() bool}func Play(conf confPlayer1) string {    // code for Player1}在上面的代码片段中,confPlayer1接口中包含了接口confPlayer2,除了Initialize函数只是confPlayer1的一部分。现在你可以为播放器 2 使用接口 confPlayer2,为播放器 1 使用 confPlayer1。请参阅下面的代码片段:播放器.gopackage gametype Player struct{  Name string  ...........  ...........}func (p Player) Set(){  .......  .......}func (p Player) Move(){  ........  ........}func Play(confPlayer2 player){   player.Move()   player.Set()}
随时随地看视频慕课网APP

相关分类

Go
我要回答