位置: 编程技术 - 正文

学习php设计模式 php实现访问者模式(Visitor)(php常用设计模式(大总结))

编辑:rootadmin

推荐整理分享学习php设计模式 php实现访问者模式(Visitor)(php常用设计模式(大总结)),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php常用设计模式(大总结),php常用的设计模式在开发中的实例,php 设计模式 鸟哥,php 设计模式 鸟哥,php 设计模式 鸟哥,php常用设计模式(大总结),php 设计模式 鸟哥,php设计模式六大原则,内容如对您有帮助,希望把文章链接给更多的朋友!

访问者模式表示一个作用于某对象结构中各元素的操作。它可以在不修改各元素类的前提下定义作用于这些元素的新操作,即动态的增加具体访问者角色。访问者模式利用了双重分派。先将访问者传入元素对象的Accept方法中,然后元素对象再将自己传入访问者,之后访问者执行元素的相应方法。访问者模式多用在聚集类型多样的情况下。在普通的形式下必须判断每个元素是属于什么类型然后进行相应的操作,从而诞生出冗长的条件转移语句。而访问者模式则可以比较好的解决这个问题。对每个元素统一调用$element->accept($vistor)即可。访问者模式多用于被访问的类结构比较稳定的情况下,即不会随便添加子类。访问者模式允许被访问结构添加新的方法。Visitor模式实际上是分离了对象结构中的元素和对这些元素进行操作的行为,从而使我们在根据对象结构中的元素进行方法调用的时候,不需要使用IF语句判断,也就是封装了操作。但是,如果增加新的元素节点,则会导致包括访问者接口及其子类的改变,这就会违反了面向对象中的开闭原则。当这种情况出现时,一般表示访问者模式已经可能不再适用了,或者说设计时就有问题了!一、Visitor模式结构图

二、Visitor模式中主要角色

学习php设计模式 php实现访问者模式(Visitor)(php常用设计模式(大总结))

1)抽象访问者角色(Visitor):为该对象结构(ObjectStructure)中的每一个具体元素提供一个访问操作接口。该操作接口的名字和参数标识了 要访问的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。2)具体访问者角色(ConcreteVisitor):实现抽象访问者角色接口中针对各个具体元素角色声明的操作。3)抽象节点(Node)角色:该接口定义一个accept操作接受具体的访问者。4)具体节点(Node)角色:实现抽象节点角色中的accept操作。5) 对象结构角色(ObjectStructure):这是使用访问者模式必备的角色。它要具备以下特征:能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合(在PHP中我们使用数组代替,因为PHP中的数组本来就是一个可以放置任何类型数据的集合)三、Visitor模式的优缺点访问者模式有如下的优点:1)访问者模式使得增加新的操作变得很容易。使用访问者模式可以在不用修改具体元素类的情况下增加新的操作。它主要是通过元素类的accept方法来接受一个新的visitor对象来实现的。如果一些操作依赖于一个复杂的结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变得很容易。2)访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。3)访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。迭代子只能访问属于同一个类型等级结构的成员对象,而不能访问属于不同等级结构的对象。访问者模式可以做到这一点。4)积累状态。每一个单独的访问者对象都集中了相关的行为,从而也就可以在访问的过程中将执行操作的状态积累在自己内部,而不是分散到很多的节点对象中。这是有益于系统维护的优点。

访问者模式有如下的缺点:1)增加新的节点类变得很困难。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。2)破坏封装。访问者模式要求访问者对象访问并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问就变得没有意义。由于访问者对象自己会积累访问操作所需的状态,从而使这些状态不再存储在节点对象中,这也是破坏封装的。

使用Visitor模式的前提: 对象群结构中(Collection) 中的对象类型很少改变。在接口Visitor和Element中,确保Element很少变化,也就是说,确保不能频繁的添加新的Element元素类型加进来,可以变化的是访问者行为或操作,也就是Visitor的不同子类可以有多种,这样使用访问者模式最方便.如果对象集合中的对象集合经常有变化, 那么不但Visitor实现要变化,ConcreteVisitor也要增加相应行为,GOF建议是,不如在这些对象类中直接逐个定义操作,无需使用访问者设计模式。

四、Visitor模式与其它模式

1、如果所浏览的结构对象是线性的,使用迭代模式而不是访问者模式也是可以的2、访问者模式浏览合成模式的一些结构对象以上两点来自《Java与模式》一书

五、Visitor模式PHP示例

标签: php常用设计模式(大总结)

本文链接地址:https://www.jiuchutong.com/biancheng/281535.html 转载请保留说明!

上一篇:php生成高清缩略图实例详解(php缩放图片)

下一篇:学习php设计模式 php实现建造者模式(php设计思路)

  • 一般纳税人减免增值税政策
  • 无偿使用房产需要交哪些税
  • 城建税的计税依据是增值税和消费税的和吗
  • 土地增值税暂行条例实施细则 税屋
  • 税务局退税多久到账
  • 融资租赁和经营性租赁区别
  • 纳税人性质怎么改
  • 记账人和复核人是一个人吗
  • 房屋租赁收入还需要缴纳附加税吗
  • 土地转让如何缴纳增值税
  • 公司单独核算项目财务怎么处理?
  • 税款滞纳金如何免除
  • 财税〔2017〕39号商业健康保险个人所得税
  • 收到税局代增值税专用发票已作废的退款怎么做账
  • 企业所得税退税会计分录
  • 小规模差额征税季度不超过30万的税收优惠
  • 怎么看是不是专用发票
  • 小微企业所得税税率2.5% 10% 25%
  • 购进原材料直接销售应该怎样结转成本呢
  • 小规模纳税人如何交增值税
  • 项目结束,财务应该怎么做
  • 小规模纳税人一个月能开多少税票
  • 电商公司贷款条件
  • 亏损计提递延
  • 华为手机麦克风在哪里
  • 跨年的费用冲回会计分录
  • 公司购买的车辆购置税怎么入账
  • 抵扣了的进项税可以冲销么
  • 不动产增值税怎么算
  • powerdvd remote
  • msoxmled.exe是什么软件
  • 开发商卖房子要交多少营业税
  • 葡萄牙海岸风光
  • php获取文本框输入的值
  • 时序21-21-21-47
  • 邓弗里斯什么水平
  • 材料款零头抹掉怎么做凭证
  • 联邦学习攻击与防御综述
  • php二分查找算法两种方法
  • 简述php操作mysql数据库的基本步骤
  • 支付中介费和物业费比例
  • c语言二级指针详解
  • php clob
  • 残保金员工人数怎么算
  • 工业企业成本核算会计分录
  • 成本法合并抵消分红
  • 四联收据每一联用途
  • 2021年财政部令68号
  • 什么企业的应急预案需要备案
  • 企业赠送个人房产 所得税
  • 药品进销差价会计科目
  • 实际缴纳的税金比应交的多的部分记入什么科目
  • 工程结算怎么结转收入
  • 短期借款的账务处理借增贷减
  • 留抵税额抵减欠税滞纳金
  • 代金券消费怎么入账
  • 软件行业成本如何归集
  • 其他应收款如何计提坏账准备
  • 成本费用率计算公式中包含税金及附加吗
  • windows vista界面
  • windows2003 64位注册码 序列号 激活码
  • win10升级win1
  • ubuntu怎么添加一个新用户
  • macbookpro怎么测声音
  • win8怎么把开始调出来
  • window8输入法不见了
  • Win7旗舰版系统镜像文件
  • 结构 类型
  • Python win32com 操作Exce的l简单方法(必看)
  • pycharm打开文件怎么运行
  • python模块导入的几种方法
  • jQuery checkbox选中问题之prop与attr注意点分析
  • cmd新建
  • JQUERY的AJAX请求缓存里的数据问题处理
  • javascript学习指南
  • 湖北生育登记网上服务大厅官网查询
  • 留抵税额过多怎么办
  • 河南省人民医院和郑大一附院哪个好
  • 合并申报后老申报表还可以继续使用吗
  • 下列哪些表述是正确的( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设