Visitor妯″紡鍖呮嫭浠ヤ笅鍑犱釜鍏冪礌錛?br />
1) 璁塊棶鑰呮帴鍙o紙Visitor錛夛細澹版槑涓涓闂帴鍙o紝瀹氫箟visit鎺ュ彛錛屾湁鍑犱釜鍏冪礌灝卞畾涔夊嚑涓帴鍙f柟娉曘傛帴鍙f柟娉曠殑鍙傛暟鏍囪瘑浜嗗叿浣撹闂厓绱犺鑹詫紝涔熷氨鏄鍙傛暟鏄竴涓叿浣撶被銆傝繖涓湴鏂逛篃鏄疺isitor鐨勪笉瓚籌紝
2) 鍏蜂綋璁塊棶鑰咃紙Concrete Visitor錛夛細瀹炵幇Visitor鎺ュ彛
3) 鍏冪礌鎺ュ彛錛圗lement錛夛細瀹氫箟涓涓猘ccept鏂規硶錛屽畠浠ヨ闂呮帴鍙d負鍙傛暟錛岃繖閲屼笉鏄叿浣撶殑璁塊棶鑰咃紝鍗充笉鐭ラ亾鍏蜂綋鐨勮闂呫?br />
4) 鍏蜂綋鍏冪礌錛圕oncrete Element錛夛細瀹炵幇鍏冪礌錛圗lement錛夋帴鍙d腑accept鏂規硶錛屾帶鍒惰闂殑嫻佺▼銆?br />
5) 瀵硅薄緇撴瀯錛圤bject Structure錛夛細榪欐槸浣跨敤Visitor妯″紡蹇呴』鐨勮鑹層傚畠瑕佸叿澶囦互涓嬬壒寰侊細鑳芥灇涓懼畠鐨勫厓绱狅紱鍙互鎻愪緵涓涓珮灞傜殑鎺ュ彛鍏佽璁塊棶鑰呰闂畠鐨勫厓绱狅紱鍙互鏄竴涓泦鍚堬紝濡備竴涓垪琛ㄦ垨涓涓棤搴忛泦鍚堛?br />
綾誨浘濡備笅錛?br />

鍏蜂綋浠g爜錛?br />
public interface Visitor
{
public void visitCollection(Collection collection);
public void visitString(String string);
public void visitFloat(Float float);
}
public class ConcreteVisitor1 implements Visitor
{
//鍦ㄦ湰鏂規硶涓紝鎴戜滑瀹炵幇浜嗗Collection鐨勫厓绱犵殑鎴愬姛璁塊棶
銆銆 public void visitCollection(Collection collection) {
銆銆 Iterator iterator = collection.iterator()
銆銆 while (iterator.hasNext()) {
銆銆 銆銆 Object o = iterator.next();
銆銆 銆銆 if (o instanceof Visitable)
銆銆 銆銆 銆銆 ((Visitable)o).accept(this);
銆銆 }
public void visitString(String string) {
銆銆 System.out.println("'"+string+"'");
}
public void visitFloat(Float float) {
銆銆 System.out.println(float.toString()+"f");
}
}
public interface Visitable
{
public void accept(Visitor visitor);
}
public class StringElement implements Visitable
{
private String value;
public ConcreteElement(String string) {
銆銆 value = string;
}
//瀹氫箟accept鐨勫叿浣撳唴瀹?nbsp;榪欓噷鏄緢綆鍗曠殑涓鍙ヨ皟鐢?/span>
銆銆 public void accept(Visitor visitor) {
銆銆 visitor.visitString(this);
}
}
public class FloatElement implements Visitable
{
private Float value;
public ConcreteElement(Float f) {
銆銆 value = f;
}
//瀹氫箟accept鐨勫叿浣撳唴瀹?nbsp;榪欓噷鏄緢綆鍗曠殑涓鍙ヨ皟鐢?/span>
銆銆 public void accept(Visitor visitor) {
銆銆 visitor.visitFloat(this);
}
}
鎬葷粨錛?br />
1銆佸厓绱犳帴鍙e拰鍏冪礌綾婚兘鏄緷璧朧isitor鎺ュ彛錛岃屼笉鏄叿浣撳疄鐜扮被錛屽緢濂界殑瀹炵幇浜嗚В鑰︺傚鏋滄湁涓涓柊鐨勫厓绱犳榪嶸isitor鍙傝錛屽彧闇瑕佸疄鐜癡isitable鎺ュ彛錛屽茍瀹炵幇accept鏂規硶鍗沖彲錛岄兘涓嶇壍娑夊叿浣撶殑Visitor銆?br />
2銆乂isitor鎺ュ彛鍒欎笉鐒訛紝瀹冧緷璧栧叿浣撶殑鍏冪礌錛屼篃灝辨槸璇村鏋滃厓绱犵殑綾誨瀷鍙戠敓鍙樺寲濡傚鍔犱竴涓厓绱犵被鍨嬶紝閭d箞Visitor鎺ュ彛鍜屽叿浣撳疄鐜扮被閮藉繀欏誨ぇ鏀癸紝榪欎釜鏄疺isitor妯″紡涓ラ噸鐨勭己闄楓?br />
3銆乂isitor妯″紡鍚嶅壇鍏跺疄錛屽ソ姣旀梾琛岀ぞ銆佹父瀹㈠拰鏅偣鐨勫叧緋匯傛梾琛岀ぞ灝辨槸Visitor鎺ュ彛錛岃繖嬈¤礬綰塊兘闇瑕佸弬瑙傚摢浜涙櫙鐐歸氬父鏄浐瀹氱殑錛堟帴鍙e浐瀹氾紝濡傛灉瑕佹敼鍙樿紼嬶紝閫氬父寰堥夯鐑︼級錛涙父瀹㈠氨榪欎簺鏅偣錛屾梾琛岀ぞ緇欎綘瀹夋帓涓や釜灝忔椂,浣犳兂鑷繁鎬庝箞鐜╅兘琛岋紱鏅偣鍒欎互涓嶅彉搴斾竾鍙樸傝繖涓瘮濡備篃璁告湁浜涗笉鎭板綋錛屼笉榪囨湁鍔╀簬鐞嗚В榪欎釜妯″紡銆?br />

]]>