<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      訪問者模式

      訪問者(Visitor)模式屬于行為型模式的一種。

      訪問者模式主要用于分離算法和對象結構,從而在不修改原有對象的情況下擴展新的操作。它適用于數據結構相對穩定,而操作(行為)容易變化的場景。

      訪問者模式允許在不修改現有類的情況下,為類層次結構中的對象定義新的操作

      訪問者模式通過將操作封裝到一個獨立的類(即訪問者)中,使得對象結構與操作解耦。

      訪問者模式使用了一種名為雙分派(在運行時根據兩個對象的類型動態選擇方法)的技巧。

      Java標準庫中的 FileVisitor,就是使用的訪問者模式。訪問者模式的設計比較復雜。

      訪問者模式適用于以下場景:

      • 數據結構相對穩定,但操作易變的系統(例如編譯器、代碼分析器)。
      • 需要對對象結構進行不同操作,并且這些操作相對獨立,例如報表生成、統計、數據轉換。

      訪問者模式通常有以下組成部分:

      • Visitor(訪問者):定義一個訪問接口,為不同類型的元素提供不同的訪問方法。
      • ConcreteVisitor(具體訪問者):訪問者的具體實現,具體執行操作。
      • Element(元素接口):定義一個 accept(Visitor v) 方法,允許 Visitor 訪問自身。
      • ConcreteElement(具體元素):具體的對象結構,實現 Element 接口,并在 accept(Visitor v) 方法中進行調用。
      • ObjectStructure(對象結構,通常是元素的集合):維護一組 Element 對象,并提供 accept(Visitor v) 方法,讓訪問者訪問所有的元素。

      我們模擬一下訪問者模式的實現。

      1、定義訪問者接口

      // 訪問者接口
      interface Visitor {
          void visit(ConcreteElementA elementA);
          void visit(ConcreteElementB elementB);
      }
      

      2、定義具體訪問者

      // 具體訪問者1
      class ConcreteVisitor1 implements Visitor {
          @Override
          public void visit(ConcreteElementA elementA) {
              System.out.println("Visitor1 訪問 " + elementA.getName());
          }
      
          @Override
          public void visit(ConcreteElementB elementB) {
              System.out.println("Visitor1 訪問 " + elementB.getName());
          }
      }
      
      // 具體訪問者2
      class ConcreteVisitor2 implements Visitor {
          @Override
          public void visit(ConcreteElementA elementA) {
              System.out.println("Visitor2 訪問 " + elementA.getName());
          }
      
          @Override
          public void visit(ConcreteElementB elementB) {
              System.out.println("Visitor2 訪問 " + elementB.getName());
          }
      }
      

      3、定義元素接口

      // 元素接口
      interface Element {
          void accept(Visitor visitor);
      }
      

      4、定義具體元素

      // 具體元素 A
      class ConcreteElementA implements Element {
          private String name = "ElementA";
      
          @Override
          public void accept(Visitor visitor) {
              visitor.visit(this);
          }
      
          public String getName() {
              return name;
          }
      }
      
      // 具體元素 B
      class ConcreteElementB implements Element {
          private String name = "ElementB";
      
          @Override
          public void accept(Visitor visitor) {
              visitor.visit(this);
          }
      
          public String getName() {
              return name;
          }
      }
      

      5、定義對象結構

      // 對象結構,包含多個元素
      class ObjectStructure {
          private List<Element> elements = new ArrayList<>();
      
          public void addElement(Element element) {
              elements.add(element);
          }
      
          public void accept(Visitor visitor) {
              for (Element element : elements) {
                  element.accept(visitor);
              }
          }
      }
      

      6、測試訪問者模式

      public class VisitorPatternDemo {
          public static void main(String[] args) {
              ObjectStructure structure = new ObjectStructure();
      
              // 添加元素
              structure.addElement(new ConcreteElementA());
              structure.addElement(new ConcreteElementB());
      
              // 使用不同的訪問者訪問元素
              Visitor visitor1 = new ConcreteVisitor1();
              Visitor visitor2 = new ConcreteVisitor2();
      
              System.out.println("使用 Visitor1 訪問:");
              structure.accept(visitor1);
      
              System.out.println("\n使用 Visitor2 訪問:");
              structure.accept(visitor2);
          }
      }
      

      訪問者模式的優缺點

      優點:

      • 遵循開閉原則(OCP):可以在不修改元素類的情況下,為其添加新的操作。
      • 將數據結構與行為分離:對象結構負責管理元素,而行為由訪問者獨立實現,增強了靈活性。
      • 適用于復雜對象結構:當對象結構中包含不同類型的元素時,訪問者模式可以統一管理操作邏輯。

      缺點:

      • 代碼復雜度增加:對于簡單對象結構,使用訪問者模式可能會增加不必要的復雜性。
      • 每次在元素層次結構中添加或移除一個類時,都要更新所有的訪問者。

      我們可以將訪問者模式視為命令模式的加強版本,其對象可對不同類的多種對象執行操作。

      至此23種設計模式暫告一個段落了。我們將開啟下個篇章。

      只有讀不完的書,哪有不會走的人。-- 煙沙九洲

      ?
      posted @ 2025-03-21 23:15  煙沙九洲  閱讀(49)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久夜色撩人精品国产av| 国产对白老熟女正在播放| 免费无码一区无码东京热 | 国产精品视频一区二区不卡| 亚洲av伊人久久综合性色| 丁香婷婷无码不卡在线| 蜜芽久久人人超碰爱香蕉| 天天综合色天天综合色h| 日韩乱码人妻无码中文字幕视频| 少妇一边呻吟一边说使劲视频| 亚洲国产精品综合久久20| 高清国产一区二区无遮挡| 丰满人妻跪趴高撅肥臀| 丰满少妇内射一区| 久久男人av资源站| 国产精品电影久久久久电影网| 男人下部进女人下部视频| 国产毛片精品av一区二区| 国产精品综合在线免费看| 中文字幕午夜福利片午夜福利片97| 日韩一区在线中文字幕| 中文字幕国产精品日韩| 久久综合亚洲色一区二区三区| 在线永久看片免费的视频| 麻豆tv入口在线看| 国偷自产一区二区三区在线视频| 日韩欧美亚洲综合久久| 国产精品综合色区在线观| 九九热精品免费在线视频| 四房播色综合久久婷婷| 国产内射性高湖| 美日韩精品综合一区二区| 亚洲区1区3区4区中文字幕码| A毛片终身免费观看网站| 亚洲熟妇色自偷自拍另类| 色欲精品国产一区二区三区av | 老熟妇性老熟妇性色| 免费国产va在线观看| 一级片一区二区中文字幕| 99久久婷婷国产综合精品青草漫画| 国产一区二区午夜福利久久|