行爲模式:訪問者模式(visitor)解析例子
摘要:本文深入淺出的講述了設計模式中的模式屬於行爲型模式,其意圖是表示一個作用於某對象結構中的各元素的操作。他使你可以在不改變個元素的類的前提下定義作用與這些元素的操作。考慮一個訪問汽車各個部件的程序,該程序需要在汽車各個部件上執行某些操作,比如:獲取名字等等,因此它可能需要定義許多操作已進行類型檢查。這些操作大多要求對不同節點進行不同的處理,如果單純使用 類,並在便利抽象語法樹時將此對象傳遞給當前訪問的元素。當一個元素接受該訪問者時,該元素向訪問者發送一個包含自身類信息的請求,該請求同時也將該元素本身作爲一個參數,然後訪問者將爲該原色執行該操作,這一個操作以前是在該元素的類中的。使用Visitor適用性:
l需要對一個對象結構中的對象進行很多不同的並且不相關的操作。而你想避免讓這些操作污染這些對象的類,Visitor模式讓每個應用僅僅包含需要用到的操作。
l爲該對象結構中的ConcreteElement操作,該操作的名字和特徵標示了發送Visit ConcreteVisitor:聲明的操作,每個操作實現本算法的一部分,而該算法片斷乃是對應於結構中對象的類。ConcreteVisitor Element:操作,該操作以一個訪問者爲參數。
l visitor;
packagepublic Visitor{void
visit(Body body);void}
class Visitor{protected;public name }public visit(Wheel wheel){out+wheel.getName()+
void System."Check Engine!" }public visit(Body body){out);
.println(" Check Car!" }具體的被訪問者: visitor; implements void v.visit(
} visitor; implements engine Engine();private =
Wheel[] new),"Front right" Wheel(new)};public accept(Visitor v){this
.accept(v);for i=0;i<4;i++)wheels }總結:訪問者模式充分利用了面嚮對象語言中的多態模式。把同類對象的訪問統一到一個類中,使得改變訪問方式變得容易,增加一個被訪問者的類也比較容易。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.