如何处理嵌入式接口并在它们之间共享数据

时间:2016-08-02 12:24:49

标签: oop go interface

我想更好地了解如何使用接口,主要是在可重用组件中拆分代码,同时使其更容易进行测试,目前我的主要问题是如何在属于的接口之间共享/获取数据主界面,例如:

https://play.golang.org/p/67CQor1_pY

package main

import (
    "fmt"
)

type MainInterface interface {
    SubInterfaceA
    SubInterfaceB
}

type SubInterfaceA interface {
    MethodA()
    GetterA(s implementMain)
}

type SubInterfaceB interface {
    MethodB()
    GetterB(s implementMain)
}

type implementA struct{}

func (ia *implementA) MethodA() { fmt.Println("I am method A") }
func (ia *implementA) GetterA(s implementMain) {
    fmt.Println(s.Data)
}

type implementB struct{}

func (ib *implementB) MethodB() { fmt.Println("I am method B") }
func (ib *implementB) GetterB(s implementMain) {
    fmt.Println(s.Data)
}

type implementMain struct {
    Data string
    SubInterfaceA
    SubInterfaceB
}

func New(d string) implementMain {
    return implementMain{
        Data:          d,
        SubInterfaceA: &implementA{},
        SubInterfaceB: &implementB{},
    }
}

func main() {
    var m MainInterface

    m = New("something")

    fmt.Println(m.(implementMain).Data)

    m.MethodA()                  // prints I am method A
    m.MethodB()                  // prints I am method B
    m.GetterA(m.(implementMain)) // prints "something"
    m.GetterB(m.(implementMain)) // prints "something"
}

在上面的代码中,在struct implementAimplementB的方法中,如何访问实现implementMain的父拥有者MainInterface的struct元素,而不将其传递给争论?

with holder struct我的意思是:

type implementMain struct {
    Data string
    SubInterfaceA
    SubInterfaceB
}

如果我是正确的SubInterfaceA并嵌入SubInterfaceB并帮助使结构implementMain满足MainInterface

type MainInterface interface {                                                                                                                                                                                                                                              
   SubInterfaceA                                                                                                                                                                                                                                                           
   SubInterfaceB                                                                                                                                                                                                                                                           
} 

但是在SubInterfaceAsubInterfaceB的嵌入式方法中,为获得data string而使用的最佳做法是什么?

我创建了Getter(s implementMain)方法并传递了 holder 结构,但必须转换类型:

m.GetterA(m.(implementMain)) 

我不知道通过满足接口,所有涉及的接口是否可以成为相同结构范围的一部分,如果它们如此,如何在它们之间或其组件之间获取/共享数据?例如,除了可以从data string获取/访问SubInterfaceA

到达SubInterfaceB

0 个答案:

没有答案
相关问题