鍍金池/ 教程/ Java/ Java訪問者模式
Java前端控制器模式
Java工廠設(shè)計(jì)模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對(duì)象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計(jì)模式
Java空對(duì)象模式
Java數(shù)據(jù)訪問對(duì)象模式
Java訪問者模式
Java組合實(shí)體模式
Java服務(wù)定位器模式

Java訪問者模式

在訪問者模式中,使用訪問者類來改變?cè)仡惖膱?zhí)行算法。 通過這種方式,元素的執(zhí)行算法可以隨訪問者變化而變化。 此模式屬于行為模式類別。 根據(jù)每個(gè)模式,元素對(duì)象必須接受訪問者對(duì)象,以便訪問者對(duì)象處理對(duì)元素對(duì)象的操作。

實(shí)現(xiàn)實(shí)例

在這個(gè)實(shí)現(xiàn)的示例中,將創(chuàng)建一個(gè)叫作ComputerPart的接口,并定義接受操作。Keyboard, Mouse, MonitorComputer 是實(shí)現(xiàn)ComputerPart接口的具體類。還將定義另一個(gè)接口ComputerPartVisitor,它將定義一個(gè)訪問類操作。 Computer 使用具體的訪客做相應(yīng)的動(dòng)作。

VisitorPatternDem這是一個(gè)演示類,將使用ComputerComputerPartVisitor類來演示訪問者模式的使用。

訪問者模式示例的結(jié)構(gòu)如下圖所示 -

第1步

定義一個(gè)接口來表示元素,其代碼如下 -

ComputerPart.java

public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}

第2步

創(chuàng)建擴(kuò)展上述類的具體類,其代碼如下 -

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步

定義一個(gè)接口來代表訪問者,其代碼如下 -
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步

創(chuàng)建實(shí)現(xiàn)上述類的具體訪問者,其代碼如下 -
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顯示計(jì)算機(jī)的部件。
VisitorPatternDemo.java

public class VisitorPatternDemo {
   public static void main(String[] args) {

      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}

第6步

驗(yàn)證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.