Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java訪問者模式
在訪問者模式中,使用訪問者類來改變元素類的執行算法。 通過這種方式,元素的執行算法可以隨訪問者變化而變化。 此模式屬於行爲模式類別。 根據每個模式,元素對象必須接受訪問者對象,以便訪問者對象處理對元素對象的操作。
實現實例
在這個實現的示例中,將創建一個叫作ComputerPart
的接口,並定義接受操作。Keyboard
, Mouse
, Monitor
和 Computer
是實現ComputerPart
接口的具體類。還將定義另一個接口ComputerPartVisitor
,它將定義一個訪問類操作。 Computer
使用具體的訪客做相應的動作。
VisitorPatternDem
這是一個演示類,將使用Computer
和ComputerPartVisitor類
來演示訪問者模式的使用。
訪問者模式示例的結構如下圖所示 -
第1步
定義一個接口來表示元素,其代碼如下 -
ComputerPart.java
public interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}
第2步
創建擴展上述類的具體類,其代碼如下 -
Keyboard.java
public class Keyboard implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Monitor.java
public class Monitor implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Mouse.java
public class Mouse implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Computer.java
public class Computer implements ComputerPart {
ComputerPart[] parts;
public Computer(){
parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};
}
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
for (int i = 0; i < parts.length; i++) {
parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}
第3步
定義一個接口來代表訪問者,其代碼如下 -
ComputerPartVisitor.java
public interface ComputerPartVisitor {
public void visit(Computer computer);
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
public void visit(Monitor monitor);
}
第4步
創建實現上述類的具體訪問者,其代碼如下 -
ComputerPartDisplayVisitor.java
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
@Override
public void visit(Computer computer) {
System.out.println("Displaying Computer.");
}
@Override
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}
@Override
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}
@Override
public void visit(Monitor monitor) {
System.out.println("Displaying Monitor.");
}
}
第5步
使用ComputerPartDisplayVisitor
顯示計算機的部件。
VisitorPatternDemo.java
public class VisitorPatternDemo {
public static void main(String[] args) {
ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
}
}
第6步
驗證輸出,執行上面的代碼得到以下結果 -
Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.