美文网首页
设计模式之访问者模式

设计模式之访问者模式

作者: 古月沧澜 | 来源:发表于2019-04-20 18:08 被阅读0次

    一、例子

    案列内容

    代码

         抽象元素类
         ```
         ```
         普通员工类
        ```
        ```
         管理员类
        ```
        ```
         访问者类
         ```
         ```
         场景类
         ```
         ```
    
    
         运行结果
    

    二、模式讲解

    含义:

    设计图

    角色:

    1. 抽象元素类:

    2.具体元素类:

    3.抽象访问者类:定义方法方法和访问对象

    4.具体访问者类:实现具体的访问方法

    5.对象结构:元素的产生者,一般是包含多个不同对象,多个不同接口的容器,一般不抽象出类的,可以是Map.List,Set等。

    通用类代码

    三、优劣势

    优势:

    1.符合单一职责原则,Element抽象出两个子类负责对数据的加载,访问者类Visitor负责对数据进行报表的展现,二者分工明确,各自演绎变化。
    2.非常容易扩展,在不影响数据结构的基础上可以增加新的操作,增加访问者或者增加在访问者中增加新的方法。
    3.灵活程度高,例如进行数据统计的时候,按照上面的例子统计所有的员工工资的总和,不同岗位的系数不同,普通员工1.2,经理1.3,主管1.5,统计的时候用for循环进行统计结算,然后用instance of进项判断的话,比较麻烦,可以选择用访问者模式进行统计。

    劣势:

    1.对象元素对访问者公开比较多的细节,访问者类访问了对象的内部细节,这违背了迪米特法则
    2.对象元素新增、修改、删除字段不太容易,对应的访问者类会需要新增数据
    3.不符合依赖倒置的原则,访问者依赖的是具体的对象那个而不是抽象对象

    四、适用场景

    业务规则需要遍历多个对象,迭代器模式只能遍历相同的对象,当需要遍历不同的对象,并且对不同的对象有不同的操作时,一定要考虑使用访问者模式,访问者模式是对迭代器模式的扩展。访问者模式可以用作拦截器的功能。

    五、扩展

    访问者模式适用于项目大规模的重构,一般适用于项目的需求非常明确,功能点也已经明确,可以通过访问者模式很容易的对原有功能进行规划重整,达到最终目的,功能集中化

    六、双分派

    相关文章

      网友评论

          本文标题:设计模式之访问者模式

          本文链接:https://www.haomeiwen.com/subject/tvjlgqtx.html