PHP设计模式—解释器模式
发布时间:2020-12-13 21:24:24 所属栏目:PHP教程 来源:网络整理
导读:? 定义: 解释器模式(interpreter): 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个
? 定义:解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 ? 结构:
? 代码实例:用解释器模式设计一个“韶粵通”公交车卡的读卡器程序。 // Expression.php /** * 抽象表达类 * Class Expression */ abstract class Expression { public function interpret($info); } TerminalExpression.php* * 终结符表达式类 * Class TerminalExpression class TerminalExpression extendsprivate $value = []; function __construct(array $value) { $this->value = ; } ) { TODO: Implement interpret() method. if (in_array($info,$this->value)) { return true; } else { false; } } } AndExpression.php* * 非终结符表达式类 * Class AndExpression class AndExpression $city; $person; function __construct(Expression $city,Expression $this->city = ; $this->person = TODO: Implement interpret() method. $data = explode('的',1)">); return $this->city->interpret($data[0]) && $this->person->interpret($data[1]); } } Context.php* * Class Context Context { $city = ["韶关","广州"]; $person = ["老人","妇女","儿童"$cityPersonfunction __construct() { $cityExpression = new TerminalExpression(city); $personExpression = person); $this->cityPerson = new AndExpression($cityExpression,1)">$personExpression); } function freeRide($isTrue = $this->cityPerson->interpret(if ($isTrue) { echo "您是" . $info . ",您本次乘车免费!n"echo $info . ",您不是免费人员,本次乘车扣费2元!n"; } } } ? 客户端调用: $context = new Context(); $context->freeRide("韶关的老人"); $context->freeRide("韶关的年轻人"$context->freeRide("广州的妇女"$context->freeRide("广州的儿童"$context->freeRide("山东的儿童"); ? 结果: 您是韶关的老人,您本次乘车免费!
韶关的年轻人,您不是免费人员,本次乘车扣费2元!
您是广州的妇女,您本次乘车免费!
您是广州的儿童,您本次乘车免费!
山东的儿童,您不是免费人员,本次乘车扣费2元!
? 总结:
? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |