訪問者模式(Visitor):把數據結構和作用于結構上的操作解耦合,使得操作集合可相對自由地演化。訪問者模式適用于數據結構相對穩定而算法又容易變化的系統。訪問者模式的優點是增加操作很容易,因為增加操作意味著增加新的訪問者;而它的缺點就是增加新的數據結構很困難。
##一、uml建模:

##二、代碼實現
~~~
/**
* 訪問者模式(Visitor):把數據結構和作用于結構上的操作解耦合,使得操作集合可相對自由地演化。
*
* 訪問者模式就是一種分離對象數據結構與行為的方法,通過這種分離,
*
* 可達到為一個被訪問者動態添加新的操作而無需做其它的修改的效果。
*/
interface Visitor {
/**
* 訪問對象
*
* @param subject
* 待訪問的對象
*/
public void visitor(Subject subject);
}
class MyVisitor implements Visitor {
@Override
public void visitor(Subject subject) {
System.out.println("MyVisitor 訪問的屬性值為:" + subject.getField());
}
}
class OtherVisitor implements Visitor {
@Override
public void visitor(Subject subject) {
System.out.println("OtherVisitor 訪問的屬性值為:" + subject.getField());
}
}
interface Subject {
/**接受將要訪問它的對象 */
public void accept(Visitor visitor);
/**獲取將要被訪問的屬性 */
public String getField();
}
class MySubject implements Subject {
private String name;
public MySubject(String name) {
this.name = name;
}
/**
* 這是核心:接收【指定的訪問者】來訪問咱自身的MySubject類的狀態或特征
*/
@Override
public void accept(Visitor visitor) {
visitor.visitor(this);
}
@Override
public String getField() {
return name;
}
}
/**
* 客戶端測試類
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
/**
* 創建待訪問的對象
*/
Subject subject = new MySubject("張三");
/**
* 接受訪問對象:這里只接收MyVisitor訪問者對象,不接收OtherVisitor訪問者對象
*/
subject.accept(new MyVisitor());
}
}
~~~
##三、總結
訪問者模式就是一種分離對象數據結構與行為的方法,通過這種分離,可達到為一個被訪問者動態添加新的操作而無需做其它的修改的效果。
- 前言
- (一)策略模式建模與實現
- (二)觀察者模式建模與實現
- (三)裝飾者模式建模與實現
- (四)工廠方法模式建模與實現
- (五)抽象工廠模式建模與實現
- (六)單例模式建模與實現
- (七)命令模式建模與實現
- (八)適配器模式建模與實現
- (九)外觀模式建模與實現
- (十)模板方法模式建模與實現
- (十一)迭代器模式建模與實現
- (十二)組合模式建模與實現
- (十三)狀態模式建模與實現
- (十四)代理模式建模與實現
- (十五)建造者模式建模與實現
- (十六)原型模式建模與實現
- (十七)橋接模式建模與實現
- (十八)責任鏈模式建模與實現
- (十九)備忘錄模式建模與實現
- (二十)解釋器模式建模與實現
- (二十一)享元模式建模與實現
- (二十二)中介者模式建模與實現
- (二十三)訪問者模式建模與實現
- Java設計模式博客全目錄