设计模式--访问器(Visitor)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--访问器(Visitor)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模式定義
表示一個作用于某對象結構中的各元素的操作,使得可以在不改變(穩定)各元素的類的前提下定義(擴展)作用于這些元素的新操作(變化)
類圖
要點總結
- Visitor模式通過所謂雙重分發(double dispatch)來實現在不更改(不添加新的操作-編譯時)Element類層次結構的前提下,在運行時透明地為類層次結構上的各個類動態添加新的操作(支持變化)
- 所謂雙重分發即Visitor模式中間包括了兩個多態分發:第一個為accept方法的多態辨析,第二個為visitElementX方法的多態辨析
- Visitor模式的最大缺點在于擴展類層次結構(增加新的Element子類),會導致Visitor類的改變,因此Visitor模式適用于“Element類層次結構穩定,而其中的操作卻經常面臨頻繁改動”
Go語言代碼實現
工程目錄
visitor.go
package Visitorimport "fmt"type IVisitor interface {Visit() }type WeiBoVisitor struct {}func (w WeiBoVisitor) Visit(){fmt.Println("Visit WeiBo") }type IQIYIVisitor struct {}func (i IQIYIVisitor) Visit () {fmt.Println("Visit IQiYi") }type IElement interface {Accept(visitor IVisitor) }type Element struct {}func (e Element) Accept(v IVisitor) {v.Visit() }visitor_test.go
package Visitorimport "testing"func TestElement_Accept(t *testing.T) {e := new(Element)e.Accept(new(WeiBoVisitor))e.Accept(new(IQIYIVisitor)) }總結
以上是生活随笔為你收集整理的设计模式--访问器(Visitor)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--命令(Command)模式
- 下一篇: 设计模式--解析器(Interprete