1 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
我得出的結(jié)論是泛型讓這種模式變得更糟。通過參數(shù)化Collection結(jié)構(gòu),您強(qiáng)制items []T擁有相同的元素。使用普通接口,您可以進(jìn)行動(dòng)態(tài)分派,從而允許items包含不同的實(shí)現(xiàn)。僅此一項(xiàng)就應(yīng)該是充分的理由。
這是一個(gè)沒有泛型的最小實(shí)現(xiàn),改編自一些 Java 示例(可運(yùn)行代碼):
主要接口:
type Visitor func(Element)
type Element interface {
Accept(Visitor)
}
實(shí)施者:
type Foo struct{}
func (f Foo) Accept(visitor Visitor) {
visitor(f)
}
容器:
type List struct {
elements []Element
}
func (l *List) Accept(visitor Visitor) {
for _, e := range l.elements {
e.Accept(visitor)
}
visitor(l)
}
訪客本身,作為常規(guī)功能。在這里您可以自由定義任何功能。由于是無類型的,您可以直接將其作為Visitor參數(shù)傳遞:
func doVisitor(v Element) {
switch v.(type) {
case *List:
fmt.Println("visiting list")
case Foo:
fmt.Println("visiting foo")
case Bar:
fmt.Println("visiting bar")
}
}
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)