浅谈PHP面向工具之会见者模式+组合模式
副问题[/!--empirenews.page--]
由于原文中连续了组合模式的代码示例来讲会见者模式 以是这里就归并一路来温习了。但首要照旧讲会见者模式。顾名思义这个模式会有一个会见者类(就像近期的热播剧“人民的名义”中的搜查官,跑到到贪官家里观测取证,查实后就治罪),被会见者类挪用会见者类的时辰会将自身转达给它行使。 直接看代码: abstract class Unit {abstract function bombardStrength(); //获取单元的进攻力 //这个要领将挪用会见者类,并将自身转达给它 //按原文的说法是配置一个深度,固然之后会有挪用但这个要领对付领略这个模式不重要可以不消管他(原文示例代码中常常有些跟领略模式道理没太多相关的代码) function getDepth(){ //弓箭手 //激光炮 class LaserCannonUnit extends Unit{ //骑兵 class Cavalry extends Unit{ } //用于组合担任了unit类的实例,并让Army和TroopCarrier类担任removeUnit和addUnit要领,不放基类是由于上述的三个类已经是最小单元了不是一个军事团体removeUnit和addUnit要领对他们没用。 abstract class CompositeUnit extends Unit{ function getComposite(){ //这个要领首要用于判定当前实例是否是一个 CompositeUnit 类 protected function units(){ function removeUnit(Unit $unit){ //删除一个军事单元 ); function addUnit(Unit $unit){ //添加一个军事单元 function bombardStrength(){ function accept(Armyvisitor $visitor){ //挪用会见者 //部队 class Army extends CompositeUnit { } //舰队 class TroopCarrier extends CompositeUnit { } //会见者类 abstract class ArmyVisitor{ //...... function visitCavalry(Cavalry $node){ //....... function visitLaserCannonUnit(LaserCannonUnit $node){ //...... function visitTroopCarrierUnit(Cavalry $node){ //...... function visitArmy(Cavalry $node){ //...... //这个会见者类首要用于获取并生涯被会见者工具的信息 function getText(){ //用于向每个工具征税的会见者类,客户端代码2中将会挪用 function visit(Unit $node){ function visitArcher(Archer $node){ //复写了父类的要领,对付差异的单元征收差异的税 function visitCavalry(Cavalry $node){ function visitTroopCarrierUnit(TroopCarrierUnit $node){ (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |