zoukankan      html  css  js  c++  java
  • 访问者模式


    访问者模式

    • 访问者模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
    • 先来举个例子吧,一个公司有各个层面的员工,有码农、技术主管、销售主管、总经理等等,这些员工都有个人基本信息(姓名、性别)、薪金、工作职责或业绩,那么如何以报表的形式展示这些信息呢,如下是两个类图:

    访问者模式的优缺点
    • 访问者模式的优点
      • 符合单一职责原则:具体元素角色也就是Employee抽象类的两个子类负责数据加载,而Visitor类负责报表的呈现,两个不同的职责非常明确的分离开来,各自演绎变化;
      • 优秀的扩展性:由于职责分开,继续增加对数据的操作是非常快捷的,例如,想要生成一份不同格式的报表,直接在Visitor中增加一个方法;
      • 灵活性非常高:当数据汇总时,如果要统计所有员工的工资,而且不同类型的员工工资系数不同,则可以通过访问者模式实现。
    • 访问者模式的缺点
      • 具体元素对访问者公布细节:访问者要访问一个类就必然要求这个类公布一些方法和数据,也就是访问者关注了其他类的内部细节,这是迪米特法则所不建议的;
      • 具体元素变更比较困难,具体元素角色的增加、删除、修改都是比较困难的,如上例中增加一个年龄字段,则Visitor就需要修改,如果有多个Visitor那么会改动很大;
      • 违背了依赖倒置原则:访问者依赖的是具体元素,而不是抽象元素,这违背了依赖倒置原则,特别是在面向对象的编程中,抛弃对接口的依赖,而直接依赖实现类,扩展比较困难。
    访问者模式的应用场景
    • 一个对象结构包含很多类对象,他们有不同的接口,想对这些对象实施一些依赖于其具体类的操作,也就是用迭代器模式已经不能胜任的场景。
    • 需要对一个对象结构中的对象进行很多不同并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。
  • 相关阅读:
    vs运行代码版本不一致删除缓存
    spring framework 各版本源码下载地址
    类型初始值设定项引发异常
    datagridview 点击列标题排序
    软媒魔方u盘装系统
    sql中exists,not exists的用法
    java web第一个Servlet程序
    《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler
    如何正确设置 Informix GLS 及 CSDK 语言环境
    Linux网络流量控制工具—Netem
  • 原文地址:https://www.cnblogs.com/zhanglei93/p/6106156.html
Copyright © 2011-2022 走看看