設計模式(十九):訪問者模式

優勢:spa

  ① 能夠在不改變各元素的類的前提下,定義做用於這些元素的新操做新狀態,將元素和做用於元素之上的操做之間的耦合解脫開,使得操做能夠相對集中和自由變化增減。code

  ② 對於元素操做或狀態,具備良好的靈活性和擴展性。對象

缺點:blog

  ① 增長新的對象結構(即對象元素)Element很困難,須要改動多。it

適用範圍:class

  該模式適合於對象結構(即對象元素)相對穩定、且有易於變化的操做或狀態的系統擴展

客戶端:方法

  ObjectStructure o = new ObjectStructure(); //對象結構
  o.add(new ConcreteElement1()); //男人
  o.add(new ConcreteElement2()); //女人

  Visitor success = new ConcreteVisitor1();//成功
  o.display(success); //展現

  Visitor fail = new ConcreteVisitor2();//失敗
  o.display(fail); //展現

  Visitor love = new ConcreteVisitor3();//戀愛
  o.display(love); //展現im

  //打印結果  客戶端

  男人成功時,背後多半有個偉大的女人
  女人成功時,背後大多有個不成功的男人
  男人失敗時,悶頭喝酒,誰也不用勸
  女人失敗時,眼淚汪汪,誰也勸不了
  男人戀愛時,凡事不懂也要裝懂
  女人戀愛時,遇事懂也裝不懂

        /**
         * ObjectStructure  對象結構類(添加、刪除和展現全部元素的方法)
         * Element 抽象的對象元素(獲取元素狀態的方法)
         * ConcreteElement1 男人 ConcreteElement2 女人  -- 元素實例化
         *
         * Visitor 元素狀態抽象類(分別獲知男人和女人狀態的方法)
         * ConcreteVisitor1 成功狀態(男女)  ConcreteVisitor2 失敗狀態(男女)  ConcreteVisitor3 戀愛狀態(男女)  -- 實例化狀態
         */
相關文章
相關標籤/搜索