• 设计模式(十九):访问者模式


    优点:

      ① 可以在不改变各元素的类的前提下,定义作用于这些元素的新操作新状态,将元素和作用于元素之上的操作之间的耦合解脱开,使得操作可以相对集中和自由变化增减。

      ② 对于元素操作或状态,具有良好的灵活性和扩展性。

    缺点:

      ① 增加新的对象结构(即对象元素)Element很困难,需要改动多。

    适用范围:

      该模式适合于对象结构(即对象元素)相对稳定、且有易于变化的操作或状态的系统

    客户端:

      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); //展示

      //打印结果  

      男人成功时,背后多半有个伟大的女人
      女人成功时,背后大多有个不成功的男人
      男人失败时,闷头喝酒,谁也不用劝
      女人失败时,眼泪汪汪,谁也劝不了
      男人恋爱时,凡事不懂也要装懂
      女人恋爱时,遇事懂也装不懂

            /**
             * ObjectStructure  对象结构类(添加、删除和展示所有元素的方法)
             * Element 抽象的对象元素(获取元素状态的方法)
             * ConcreteElement1 男人 ConcreteElement2 女人  -- 元素实例化
             *
             * Visitor 元素状态抽象类(分别获知男人和女人状态的方法)
             * ConcreteVisitor1 成功状态(男女)  ConcreteVisitor2 失败状态(男女)  ConcreteVisitor3 恋爱状态(男女)  -- 实例化状态
             */
  • 相关阅读:
    bzoj 1588: [HNOI2002]营业额统计 treap
    Codeforces Round #135 (Div. 2) E. Parking Lot 线段数区间合并
    cdoj 851 方老师与素数 bfs
    hdu 5150 Sum Sum Sum 水
    Codeforces Round #376 (Div. 2) F. Video Cards 数学,前缀和
    POJ 1984 Navigation Nightmare 带全并查集
    POJ 1655 Balancing Act 树的重心
    POJ 3140 Contestants Division 树形DP
    HDU 3586 Information Disturbing 树形DP+二分
    HDU 1561 The more, The Better 树形DP
  • 原文地址:https://www.cnblogs.com/shushengyou/p/10307601.html
Copyright © 2020-2023  润新知